summaryrefslogtreecommitdiffstats
path: root/sys/dev/fdc
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2004-12-12 10:09:05 +0000
committerphk <phk@FreeBSD.org>2004-12-12 10:09:05 +0000
commit35b3c9fdfbd8e466654ebad62b044a7d3c01f3b7 (patch)
treec331a8f51b025987771bf29e5baf7455e29185d9 /sys/dev/fdc
parentcfac934dde18f8d08432e5509b2dd827eb77be2c (diff)
downloadFreeBSD-src-35b3c9fdfbd8e466654ebad62b044a7d3c01f3b7.zip
FreeBSD-src-35b3c9fdfbd8e466654ebad62b044a7d3c01f3b7.tar.gz
Pass the file->flags down to geom ioctl handlers.
Reject certain ioctls if write permission is not indicated. Bump geom API version. Reported by: Ruben de Groot <mail25@bzerk.org>
Diffstat (limited to 'sys/dev/fdc')
-rw-r--r--sys/dev/fdc/fdc.c8
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 */
OpenPOWER on IntegriCloud