Move 32-bit compat support for FIODGNAME to the right place.

ioctl(2) commands only have meaning in the context of a file descriptor
so translating them in the syscall layer is incorrect.

The new handler users an accessor to retrieve/construct a pointer from
the last member of the passed structure and relies on type punning to
access the other member which requires no translation.

Unlike r339174 this change supports both places FIODGNAME is handled.

Reviewed by:	kib
Obtained from:	CheriBSD
Sponsored by:	DARPA, AFRL
Differential Revision:	https://reviews.freebsd.org/D17475
This commit is contained in:
Brooks Davis 2018-10-26 17:59:25 +00:00 committed by Sebastian Huber
parent eb4cbf4fd3
commit c42aaaea4f
1 changed files with 12 additions and 0 deletions

View File

@ -63,4 +63,16 @@ struct fiodgname_arg {
#define FIOSEEKDATA _IOWR('f', 97, off_t) /* SEEK_DATA */
#define FIOSEEKHOLE _IOWR('f', 98, off_t) /* SEEK_HOLE */
#ifdef _KERNEL
#ifdef COMPAT_FREEBSD32
struct fiodgname_arg32 {
int len;
uint32_t buf; /* (void *) */
};
#define FIODGNAME_32 _IOC_NEWTYPE(FIODGNAME, struct fiodgname_arg32)
#endif
void *fiodgname_buf_get_ptr(void *fgnp, u_long com);
#endif
#endif /* !_SYS_FILIO_H_ */