diff options
Diffstat (limited to 'sys/dev/fdc/fdc.c')
-rw-r--r-- | sys/dev/fdc/fdc.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c index 5846b0a..7c51590 100644 --- a/sys/dev/fdc/fdc.c +++ b/sys/dev/fdc/fdc.c @@ -1407,7 +1407,7 @@ fd_start(struct bio *bp) } static int -fd_ioctl(struct g_provider *pp, u_long cmd, void *data, struct thread *td) +fd_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag, struct thread *td) { struct fd_data *fd; struct fdc_status *fsp; @@ -1422,6 +1422,8 @@ fd_ioctl(struct g_provider *pp, u_long cmd, void *data, struct thread *td) return (0); case FD_STYPE: /* set drive type */ + if (!fflag & FWRITE) + return (EPERM); /* * Allow setting drive type temporarily iff * currently unset. Used for fdformat so any @@ -1443,6 +1445,8 @@ fd_ioctl(struct g_provider *pp, u_long cmd, void *data, struct thread *td) return (0); case FD_SOPTS: /* set drive options */ + if (!fflag & FWRITE) + return (EPERM); fd->options = *(int *)data; return (0); @@ -1464,6 +1468,8 @@ fd_ioctl(struct g_provider *pp, u_long cmd, void *data, struct thread *td) return (0); case FD_FORM: + if (!fflag & FWRITE) + return (EPERM); if (((struct fd_formb *)data)->format_version != FD_FORMAT_VERSION) return (EINVAL); /* wrong version of formatting prog */ |