linux_ntsync(9): check the file type before calling native ntsync(9)
Reported by: Alex S <iwtcex@gmail.com> Sponsored by: The FreeBSD Foundation MFC after: 3 days
This commit is contained in:
@@ -231,6 +231,10 @@ linux_ntsync_ioctl(struct thread *td, struct linux_ioctl_args *args)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LNTSYNC_IOC_SEM_RELEASE:
|
case LNTSYNC_IOC_SEM_RELEASE:
|
||||||
|
if (fp->f_type != DTYPE_NTSYNC) {
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
error = copyin(data, &val, sizeof(val));
|
error = copyin(data, &val, sizeof(val));
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
error = ntsync_sem_release(td, fp, &val);
|
error = ntsync_sem_release(td, fp, &val);
|
||||||
@@ -239,6 +243,10 @@ linux_ntsync_ioctl(struct thread *td, struct linux_ioctl_args *args)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LNTSYNC_IOC_SEM_READ:
|
case LNTSYNC_IOC_SEM_READ:
|
||||||
|
if (fp->f_type != DTYPE_NTSYNC) {
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
error = ntsync_sem_read(td, fp, &sa);
|
error = ntsync_sem_read(td, fp, &sa);
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
ntsync_sa_to_lsa(&lsa, &sa);
|
ntsync_sa_to_lsa(&lsa, &sa);
|
||||||
@@ -246,6 +254,10 @@ linux_ntsync_ioctl(struct thread *td, struct linux_ioctl_args *args)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LNTSYNC_IOC_MUTEX_UNLOCK:
|
case LNTSYNC_IOC_MUTEX_UNLOCK:
|
||||||
|
if (fp->f_type != DTYPE_NTSYNC) {
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
error = copyin(data, &lma, sizeof(lma));
|
error = copyin(data, &lma, sizeof(lma));
|
||||||
ntsync_lma_to_ma(&ma, &lma);
|
ntsync_lma_to_ma(&ma, &lma);
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
@@ -257,11 +269,19 @@ linux_ntsync_ioctl(struct thread *td, struct linux_ioctl_args *args)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LNTSYNC_IOC_MUTEX_KILL:
|
case LNTSYNC_IOC_MUTEX_KILL:
|
||||||
|
if (fp->f_type != DTYPE_NTSYNC) {
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
error = copyin(data, &val, sizeof(val));
|
error = copyin(data, &val, sizeof(val));
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
error = ntsync_mutex_kill(td, fp, val);
|
error = ntsync_mutex_kill(td, fp, val);
|
||||||
break;
|
break;
|
||||||
case LNTSYNC_IOC_MUTEX_READ:
|
case LNTSYNC_IOC_MUTEX_READ:
|
||||||
|
if (fp->f_type != DTYPE_NTSYNC) {
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
error = ntsync_mutex_read(td, fp, &ma, &doco);
|
error = ntsync_mutex_read(td, fp, &ma, &doco);
|
||||||
if (doco) {
|
if (doco) {
|
||||||
ntsync_ma_to_lma(&lma, &ma);
|
ntsync_ma_to_lma(&lma, &ma);
|
||||||
@@ -271,21 +291,37 @@ linux_ntsync_ioctl(struct thread *td, struct linux_ioctl_args *args)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LNTSYNC_IOC_EVENT_SET:
|
case LNTSYNC_IOC_EVENT_SET:
|
||||||
|
if (fp->f_type != DTYPE_NTSYNC) {
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
error = ntsync_event_set(td, fp, &val);
|
error = ntsync_event_set(td, fp, &val);
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
error = copyout(&val, data, sizeof(val));
|
error = copyout(&val, data, sizeof(val));
|
||||||
break;
|
break;
|
||||||
case LNTSYNC_IOC_EVENT_RESET:
|
case LNTSYNC_IOC_EVENT_RESET:
|
||||||
|
if (fp->f_type != DTYPE_NTSYNC) {
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
error = ntsync_event_reset(td, fp, &val);
|
error = ntsync_event_reset(td, fp, &val);
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
error = copyout(&val, data, sizeof(val));
|
error = copyout(&val, data, sizeof(val));
|
||||||
break;
|
break;
|
||||||
case LNTSYNC_IOC_EVENT_PULSE:
|
case LNTSYNC_IOC_EVENT_PULSE:
|
||||||
|
if (fp->f_type != DTYPE_NTSYNC) {
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
error = ntsync_event_pulse(td, fp, &val);
|
error = ntsync_event_pulse(td, fp, &val);
|
||||||
if (error == 0)
|
if (error == 0)
|
||||||
error = copyout(&val, data, sizeof(val));
|
error = copyout(&val, data, sizeof(val));
|
||||||
break;
|
break;
|
||||||
case LNTSYNC_IOC_EVENT_READ:
|
case LNTSYNC_IOC_EVENT_READ:
|
||||||
|
if (fp->f_type != DTYPE_NTSYNC) {
|
||||||
|
error = ENOTTY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
error = ntsync_event_read(td, fp, &ea);
|
error = ntsync_event_read(td, fp, &ea);
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
ntsync_ea_to_lea(&lea, &ea);
|
ntsync_ea_to_lea(&lea, &ea);
|
||||||
|
|||||||
Reference in New Issue
Block a user