Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Add a new sockopt member to keep track of the actual size of...



details:   https://anonhg.NetBSD.org/src/rev/19f8ee400661
branches:  trunk
changeset: 828804:19f8ee400661
user:      christos <christos%NetBSD.org@localhost>
date:      Thu Jan 04 01:42:25 2018 +0000

description:
Add a new sockopt member to keep track of the actual size of the option
that should be returned to the caller in getsockopt(2).

(Tom Ivar Helbekkmo)

diffstat:

 share/man/man9/sockopt.9 |  7 ++++---
 sys/kern/uipc_socket.c   |  7 +++++--
 sys/kern/uipc_syscalls.c |  6 +++---
 sys/sys/param.h          |  4 ++--
 sys/sys/socketvar.h      |  3 ++-
 5 files changed, 16 insertions(+), 11 deletions(-)

diffs (132 lines):

diff -r e81e901cd0f0 -r 19f8ee400661 share/man/man9/sockopt.9
--- a/share/man/man9/sockopt.9  Thu Jan 04 01:01:59 2018 +0000
+++ b/share/man/man9/sockopt.9  Thu Jan 04 01:42:25 2018 +0000
@@ -1,4 +1,4 @@
-.\"    $NetBSD: sockopt.9,v 1.10 2017/01/16 12:54:25 njoly Exp $
+.\"    $NetBSD: sockopt.9,v 1.11 2018/01/04 01:42:25 christos Exp $
 .\"
 .\" Copyright (c) 2008 Iain Hibbert
 .\" All rights reserved.
@@ -23,7 +23,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd September 4, 2009
+.Dd January 3, 2018
 .Dt SOCKOPT 9
 .Os
 .Sh NAME
@@ -57,6 +57,7 @@
        int             sopt_level;             /* option level */
        int             sopt_name;              /* option name */
        size_t          sopt_size;              /* data length */
+       size_t          sopt_retsize;           /* returned data length */
        void *          sopt_data;              /* data pointer */
        uint8_t         sopt_buf[sizeof(int)];  /* internal storage */
 };
@@ -133,7 +134,7 @@
 which will not fail.
 .It Fn sockopt_setint "sopt" "value"
 Common case of set sockopt integer value.
-The sockpt structure must contain an int sized data field or be previously
+The sockopt structure must contain an int sized data field or be previously
 unset, in which case the data pointer will be set to the internal storage.
 .El
 .Sh CODE REFERENCES
diff -r e81e901cd0f0 -r 19f8ee400661 sys/kern/uipc_socket.c
--- a/sys/kern/uipc_socket.c    Thu Jan 04 01:01:59 2018 +0000
+++ b/sys/kern/uipc_socket.c    Thu Jan 04 01:42:25 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: uipc_socket.c,v 1.258 2018/01/01 00:45:12 christos Exp $       */
+/*     $NetBSD: uipc_socket.c,v 1.259 2018/01/04 01:42:25 christos Exp $       */
 
 /*-
  * Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.258 2018/01/01 00:45:12 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.259 2018/01/04 01:42:25 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -2113,6 +2113,8 @@
                return EINVAL;
        
        memcpy(sopt->sopt_data, buf, len);
+       sopt->sopt_retsize = len;
+
        return 0;
 }
 
@@ -2176,6 +2178,7 @@
        
        m_copydata(m, 0, len, sopt->sopt_data);
        m_freem(m);
+       sopt->sopt_retsize = len;
 
        return 0;
 }
diff -r e81e901cd0f0 -r 19f8ee400661 sys/kern/uipc_syscalls.c
--- a/sys/kern/uipc_syscalls.c  Thu Jan 04 01:01:59 2018 +0000
+++ b/sys/kern/uipc_syscalls.c  Thu Jan 04 01:42:25 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: uipc_syscalls.c,v 1.189 2017/12/31 19:39:57 christos Exp $     */
+/*     $NetBSD: uipc_syscalls.c,v 1.190 2018/01/04 01:42:25 christos Exp $     */
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.189 2017/12/31 19:39:57 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.190 2018/01/04 01:42:25 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_pipe.h"
@@ -1249,7 +1249,7 @@
                goto out;
 
        if (valsize > 0) {
-               len = min(valsize, sopt.sopt_size);
+               len = min(valsize, sopt.sopt_retsize);
                error = copyout(sopt.sopt_data, SCARG(uap, val), len);
                if (error)
                        goto out;
diff -r e81e901cd0f0 -r 19f8ee400661 sys/sys/param.h
--- a/sys/sys/param.h   Thu Jan 04 01:01:59 2018 +0000
+++ b/sys/sys/param.h   Thu Jan 04 01:42:25 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: param.h,v 1.555 2018/01/01 00:51:36 christos Exp $     */
+/*     $NetBSD: param.h,v 1.556 2018/01/04 01:42:25 christos Exp $     */
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -67,7 +67,7 @@
  *     2.99.9          (299000900)
  */
 
-#define        __NetBSD_Version__      899001000       /* NetBSD 8.99.10 */
+#define        __NetBSD_Version__      899001100       /* NetBSD 8.99.11 */
 
 #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
     (m) * 1000000) + (p) * 100) <= __NetBSD_Version__)
diff -r e81e901cd0f0 -r 19f8ee400661 sys/sys/socketvar.h
--- a/sys/sys/socketvar.h       Thu Jan 04 01:01:59 2018 +0000
+++ b/sys/sys/socketvar.h       Thu Jan 04 01:42:25 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: socketvar.h,v 1.145 2017/07/06 17:08:57 christos Exp $ */
+/*     $NetBSD: socketvar.h,v 1.146 2018/01/04 01:42:25 christos Exp $ */
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -224,6 +224,7 @@
        int             sopt_level;             /* option level */
        int             sopt_name;              /* option name */
        size_t          sopt_size;              /* data length */
+       size_t          sopt_retsize;           /* returned data length */
        void *          sopt_data;              /* data pointer */
        uint8_t         sopt_buf[sizeof(int)];  /* internal storage */
 };



Home | Main Index | Thread Index | Old Index