diff options
author | dd <dd@FreeBSD.org> | 2001-12-20 06:38:21 +0000 |
---|---|---|
committer | dd <dd@FreeBSD.org> | 2001-12-20 06:38:21 +0000 |
commit | 23c182dfdf48843816cc4f20e488b85364a63cdf (patch) | |
tree | bb473f7ecf79394e88144d815f8e6e0527f22ab8 /sys | |
parent | 13c8600e2d9f57c039042afb0f88c1446be4d61d (diff) | |
download | FreeBSD-src-23c182dfdf48843816cc4f20e488b85364a63cdf.zip FreeBSD-src-23c182dfdf48843816cc4f20e488b85364a63cdf.tar.gz |
Actually make use of the md_version field of 'struct mdio'. In order
not to needlessly break compatibility, decrement MDIOVERSION to 0.
Approved by: phk
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/md/md.c | 13 | ||||
-rw-r--r-- | sys/sys/mdioctl.h | 2 |
2 files changed, 14 insertions, 1 deletions
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index bb4b7f0..ef22731 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -831,9 +831,18 @@ mdctlioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td) printf("mdctlioctl(%s %lx %p %x %p)\n", devtoname(dev), cmd, addr, flags, td); + /* + * We assert the version number in the individual ioctl + * handlers instead of out here because (a) it is possible we + * may add another ioctl in the future which doesn't read an + * mdio, and (b) the correct return value for an unknown ioctl + * is ENOIOCTL, not EINVAL. + */ mdio = (struct md_ioctl *)addr; switch (cmd) { case MDIOCATTACH: + if (mdio->md_version != MDIOVERSION) + return (EINVAL); switch (mdio->md_type) { case MD_MALLOC: return (mdcreate_malloc(mdio)); @@ -847,11 +856,15 @@ mdctlioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td) return (EINVAL); } case MDIOCDETACH: + if (mdio->md_version != MDIOVERSION) + return (EINVAL); if (mdio->md_file != NULL || mdio->md_size != 0 || mdio->md_options != 0) return (EINVAL); return (mddetach(mdio->md_unit, td)); case MDIOCQUERY: + if (mdio->md_version != MDIOVERSION) + return (EINVAL); sc = mdfind(mdio->md_unit); if (sc == NULL) return (ENOENT); diff --git a/sys/sys/mdioctl.h b/sys/sys/mdioctl.h index 6b16fde..c311cca 100644 --- a/sys/sys/mdioctl.h +++ b/sys/sys/mdioctl.h @@ -66,7 +66,7 @@ struct md_ioctl { #define MD_NAME "md" #define MDCTL_NAME "mdctl" -#define MDIOVERSION 1 +#define MDIOVERSION 0 /* * Before you can use a unit, it must be configured with MDIOCSET. |