FreeBSD Bugzilla – Attachment 131357 Details for
Bug 175425
[patch] kbdcontrol(1) printout about kbdmux isn't informative
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch-ioctl-var-size.txt
patch-ioctl-var-size.txt (text/plain; charset=UTF-8), 4.56 KB, created by
Yuri Victorovich
on 2013-01-21 06:01:14 UTC
(
hide
)
Description:
patch-ioctl-var-size.txt
Filename:
MIME Type:
Creator:
Yuri Victorovich
Created:
2013-01-21 06:01:14 UTC
Size:
4.56 KB
patch
obsolete
>Index: sys/kern/sys_generic.c >=================================================================== >--- sys/kern/sys_generic.c (revision 245654) >+++ sys/kern/sys_generic.c (working copy) >@@ -640,6 +640,7 @@ > int arg, error; > u_int size; > caddr_t data; >+ int vsize; > > if (uap->com > 0xffffffff) { > printf( >@@ -654,18 +655,30 @@ > * copied to/from the user's address space. > */ > size = IOCPARM_LEN(com); >+ /* Both IOC_VOID and IOC_INOUT mean that data has variable size */ >+ if (com & IOC_VOID && com & IOC_INOUT) { >+ if (size != 0) >+ return (EINVAL); >+ /* first integer has the length of the memory */ >+ error = copyin(uap->data, (caddr_t)&vsize, sizeof(vsize)); >+ if (error) >+ return (error); >+ size = (u_int)vsize; >+ if (size > IOCPARM_MAX) >+ return (EINVAL); >+ } > if ((size > IOCPARM_MAX) || >- ((com & (IOC_VOID | IOC_IN | IOC_OUT)) == 0) || >+ ((com & IOC_DIRMASK) == 0) || > #if defined(COMPAT_FREEBSD5) || defined(COMPAT_FREEBSD4) || defined(COMPAT_43) > ((com & IOC_OUT) && size == 0) || > #else > ((com & (IOC_IN | IOC_OUT)) && size == 0) || > #endif >- ((com & IOC_VOID) && size > 0 && size != sizeof(int))) >+ (((com & IOC_DIRMASK) == IOC_VOID) && size > 0 && size != sizeof(int))) > return (ENOTTY); > > if (size > 0) { >- if (com & IOC_VOID) { >+ if ((com & IOC_DIRMASK) == IOC_VOID) { > /* Integer argument. */ > arg = (intptr_t)uap->data; > data = (void *)&arg; >Index: sys/netgraph/ng_eiface.c >=================================================================== >--- sys/netgraph/ng_eiface.c (revision 245654) >+++ sys/netgraph/ng_eiface.c (working copy) >@@ -325,6 +325,15 @@ > case IOC_INOUT: > str = "IORW"; > break; >+ case IOC_OUT_EXT: >+ str = "IORE"; >+ break; >+ case IOC_IN_EXT: >+ str = "IOWE"; >+ break; >+ case IOC_INOUT_EXT: >+ str = "IORWE"; >+ break; > default: > str = "IO??"; > } >Index: sys/netgraph/ng_fec.c >=================================================================== >--- sys/netgraph/ng_fec.c (revision 245654) >+++ sys/netgraph/ng_fec.c (working copy) >@@ -1167,6 +1167,15 @@ > case IOC_INOUT: > str = "IORW"; > break; >+ case IOC_OUT_EXT: >+ str = "IORE"; >+ break; >+ case IOC_IN_EXT: >+ str = "IOWE"; >+ break; >+ case IOC_INOUT_EXT: >+ str = "IORWE"; >+ break; > default: > str = "IO??"; > } >Index: sys/netgraph/ng_iface.c >=================================================================== >--- sys/netgraph/ng_iface.c (revision 245654) >+++ sys/netgraph/ng_iface.c (working copy) >@@ -505,6 +505,15 @@ > case IOC_INOUT: > str = "IORW"; > break; >+ case IOC_OUT_EXT: >+ str = "IORE"; >+ break; >+ case IOC_IN_EXT: >+ str = "IOWE"; >+ break; >+ case IOC_INOUT_EXT: >+ str = "IORWE"; >+ break; > default: > str = "IO??"; > } >Index: sys/sys/ioccom.h >=================================================================== >--- sys/sys/ioccom.h (revision 245654) >+++ sys/sys/ioccom.h (working copy) >@@ -48,8 +48,11 @@ > #define IOC_VOID 0x20000000 /* no parameters */ > #define IOC_OUT 0x40000000 /* copy out parameters */ > #define IOC_IN 0x80000000 /* copy in parameters */ >-#define IOC_INOUT (IOC_IN|IOC_OUT) >-#define IOC_DIRMASK (IOC_VOID|IOC_OUT|IOC_IN) >+#define IOC_INOUT (IOC_IN | IOC_OUT) >+#define IOC_DIRMASK (IOC_VOID | IOC_OUT | IOC_IN) >+#define IOC_OUT_EXT IOC_OUT | IOC_VOID /* copy out parameters */ >+#define IOC_IN_EXT IOC_IN | IOC_VOID /* copy out parameters */ >+#define IOC_INOUT_EXT IOC_INOUT | IOC_VOID /* copy out parameters */ > > #define _IOC(inout,group,num,len) ((unsigned long) \ > ((inout) | (((len) & IOCPARM_MASK) << 16) | ((group) << 8) | (num))) >@@ -59,6 +62,9 @@ > #define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t)) > /* this should be _IORW, but stdio got there first */ > #define _IOWR(g,n,t) _IOC(IOC_INOUT, (g), (n), sizeof(t)) >+#define _IORE(g,n) _IOC(IOC_OUT_EXT, (g), (n), 0) >+#define _IOWE(g,n) _IOC(IOC_IN_EXT, (g), (n), 0) >+#define _IOWRE(g,n) _IOC(IOC_INOUT_EXT, (g), (n), 0) > > #ifdef _KERNEL > >Index: usr.bin/truss/syscalls.c >=================================================================== >--- usr.bin/truss/syscalls.c (revision 245654) >+++ usr.bin/truss/syscalls.c (working copy) >@@ -668,9 +668,12 @@ > tmp = strdup(temp); > else { > unsigned long arg = args[sc->offset]; >- asprintf(&tmp, "0x%lx { IO%s%s 0x%lx('%c'), %lu, %lu }", >- arg, arg & IOC_OUT ? "R" : "", >- arg & IOC_IN ? "W" : "", IOCGROUP(arg), >+ asprintf(&tmp, "0x%lx { IO%s%s%s 0x%lx('%c'), %lu, %lu }", >+ arg, >+ arg & IOC_OUT ? "R" : "", >+ arg & IOC_IN ? "W" : "", >+ (arg & IOC_VOID && arg & IOC_INOUT) ? "E" : "", >+ IOCGROUP(arg), > isprint(IOCGROUP(arg)) ? (char)IOCGROUP(arg) : '?', > arg & 0xFF, IOCPARM_LEN(arg)); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 175425
: 131357 |
131358
|
131359