git: 887eddca598a - stable/13 - stand: Make ioctl declaration consistent
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 24 Jan 2023 22:14:09 UTC
The branch stable/13 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=887eddca598afeb678d06cb997961c248da47c6e commit 887eddca598afeb678d06cb997961c248da47c6e Author: Warner Losh <imp@FreeBSD.org> AuthorDate: 2022-12-13 04:46:05 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2023-01-24 21:49:44 +0000 stand: Make ioctl declaration consistent It typically had two args with an optional third from the userland declaration in sys/ioccom.h. However, the funciton definition used a non-optional char * argument. This mismatch is UB behavior (but worked due to the calling convetions of all our machines). Instead, add a declaration for ioctl to stand.h, make the third arg 'void *' which is a better match to the ... declaration before. This prevents the convert int * -> char * errors as well. Make the ioctl user-space declaration truly user-space specific (omit it in the stand-alone build). No functional change intended. Sponsored by: Netflix Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D37680 (cherry picked from commit 2e1e68cbaee3e74a89e9b63fdb180974a2bf4292) --- stand/libsa/ioctl.c | 2 +- stand/libsa/stand.h | 1 + sys/sys/ioccom.h | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/stand/libsa/ioctl.c b/stand/libsa/ioctl.c index 7363236ada0e..5d38d73bf106 100644 --- a/stand/libsa/ioctl.c +++ b/stand/libsa/ioctl.c @@ -66,7 +66,7 @@ __FBSDID("$FreeBSD$"); #include "stand.h" int -ioctl(int fd, u_long cmd, char *arg) +ioctl(int fd, u_long cmd, void *arg) { struct open_file *f; diff --git a/stand/libsa/stand.h b/stand/libsa/stand.h index b1c48bd88b39..c0550104bca0 100644 --- a/stand/libsa/stand.h +++ b/stand/libsa/stand.h @@ -315,6 +315,7 @@ extern int close(int); extern void closeall(void); extern ssize_t read(int, void *, size_t); extern ssize_t write(int, const void *, size_t); +extern int ioctl(int, u_long, void *); extern struct dirent *readdirfd(int); extern void preload(int); diff --git a/sys/sys/ioccom.h b/sys/sys/ioccom.h index 13faba046719..7eb5c323d886 100644 --- a/sys/sys/ioccom.h +++ b/sys/sys/ioccom.h @@ -82,7 +82,7 @@ #define _IOC_INVALID (_IOC_VOID|_IOC_INOUT) /* Never valid cmd value, use as filler */ -#else +#elif !defined(_STANDALONE) #include <sys/cdefs.h>