svn commit: r344232 - head/sys/amd64/sgx
Mark Johnston
markj at FreeBSD.org
Sun Feb 17 16:43:45 UTC 2019
Author: markj
Date: Sun Feb 17 16:43:44 2019
New Revision: 344232
URL: https://svnweb.freebsd.org/changeset/base/344232
Log:
Fix refcount leaks in the SGX Linux compat ioctl handler.
Some argument validation error paths would return without releasing the
file reference obtained at the beginning of the function.
While here, fix some style bugs and remove trivial debug prints.
Reviewed by: kib
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D19214
Modified:
head/sys/amd64/sgx/sgx_linux.c
Modified: head/sys/amd64/sgx/sgx_linux.c
==============================================================================
--- head/sys/amd64/sgx/sgx_linux.c Sun Feb 17 16:35:19 2019 (r344231)
+++ head/sys/amd64/sgx/sgx_linux.c Sun Feb 17 16:43:44 2019 (r344232)
@@ -70,30 +70,26 @@ sgx_linux_ioctl(struct thread *td, struct linux_ioctl_
cmd = args->cmd;
args->cmd &= ~(LINUX_IOC_IN | LINUX_IOC_OUT);
- if (cmd & LINUX_IOC_IN)
+ if ((cmd & LINUX_IOC_IN) != 0)
args->cmd |= IOC_IN;
- if (cmd & LINUX_IOC_OUT)
+ if ((cmd & LINUX_IOC_OUT) != 0)
args->cmd |= IOC_OUT;
len = IOCPARM_LEN(cmd);
if (len > SGX_IOCTL_MAX_DATA_LEN) {
- printf("%s: Can't copy data: cmd len is too big %d\n",
- __func__, len);
- return (EINVAL);
+ error = EINVAL;
+ goto out;
}
- if (cmd & LINUX_IOC_IN) {
+ if ((cmd & LINUX_IOC_IN) != 0) {
error = copyin((void *)args->arg, data, len);
- if (error) {
- printf("%s: Can't copy data, error %d\n",
- __func__, error);
- return (EINVAL);
- }
+ if (error != 0)
+ goto out;
}
- error = (fo_ioctl(fp, args->cmd, (caddr_t)data, td->td_ucred, td));
+ error = fo_ioctl(fp, args->cmd, (caddr_t)data, td->td_ucred, td);
+out:
fdrop(fp, td);
-
return (error);
}
More information about the svn-src-all
mailing list