MFP4: @177254

Add missing CURVNET_RESTORE() calls for multiple code paths, to stop
leaking the currently cached vnet into callers and to the process.

Sponsored by:	The FreeBSD Foundation
Sponsored by:	CK Software GmbH
MFC after:	4 days
This commit is contained in:
bz 2010-04-27 15:16:54 +00:00
parent c7fd54ae5a
commit 7fcd42cfee

View File

@ -1454,6 +1454,7 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
/* FALLSTHROUGH */
default:
CURVNET_RESTORE();
return (EINVAL);
}
@ -1461,6 +1462,7 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
if (d->bd_sbuf != NULL || d->bd_hbuf != NULL ||
d->bd_fbuf != NULL || d->bd_bif != NULL) {
BPFD_UNLOCK(d);
CURVNET_RESTORE();
return (EBUSY);
}
d->bd_bufmode = *(u_int *)addr;
@ -1468,13 +1470,16 @@ bpfioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags,
break;
case BIOCGETZMAX:
return (bpf_ioctl_getzmax(td, d, (size_t *)addr));
error = bpf_ioctl_getzmax(td, d, (size_t *)addr);
break;
case BIOCSETZBUF:
return (bpf_ioctl_setzbuf(td, d, (struct bpf_zbuf *)addr));
error = bpf_ioctl_setzbuf(td, d, (struct bpf_zbuf *)addr);
break;
case BIOCROTZBUF:
return (bpf_ioctl_rotzbuf(td, d, (struct bpf_zbuf *)addr));
error = bpf_ioctl_rotzbuf(td, d, (struct bpf_zbuf *)addr);
break;
}
CURVNET_RESTORE();
return (error);