diff options
author | jh <jh@FreeBSD.org> | 2012-11-21 16:56:47 +0000 |
---|---|---|
committer | jh <jh@FreeBSD.org> | 2012-11-21 16:56:47 +0000 |
commit | e82a3d82c2e6323735987f75e75353ea73e49142 (patch) | |
tree | 227473eb3fd1d660b3c693f005447db9296b6c5b /sys/dev/md/md.c | |
parent | 4172690a5e017697ecc8c9e8b2348b4648692c7d (diff) | |
download | FreeBSD-src-e82a3d82c2e6323735987f75e75353ea73e49142.zip FreeBSD-src-e82a3d82c2e6323735987f75e75353ea73e49142.tar.gz |
Disallow attaching preloaded memory disks via ioctl.
- The feature is dangerous because the kernel code didn't check
validity of the memory address provided from user space.
- It seems that mdconfig(8) never really supported attaching preloaded
memory disks.
- Preloaded memory disks are automatically attached during md(4)
initialization. Thus there shouldn't be much use for the feature.
PR: kern/169683
Discussed on: freebsd-hackers
Diffstat (limited to 'sys/dev/md/md.c')
-rw-r--r-- | sys/dev/md/md.c | 29 |
1 files changed, 6 insertions, 23 deletions
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index 443c127..00ef7e5 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -854,27 +854,6 @@ mdinit(struct md_s *sc) DEVSTAT_ALL_SUPPORTED, DEVSTAT_TYPE_DIRECT, DEVSTAT_PRIORITY_MAX); } -/* - * XXX: we should check that the range they feed us is mapped. - * XXX: we should implement read-only. - */ - -static int -mdcreate_preload(struct md_s *sc, struct md_ioctl *mdio) -{ - - if (mdio->md_options & ~(MD_AUTOUNIT | MD_FORCE)) - return (EINVAL); - if (mdio->md_base == 0) - return (EINVAL); - sc->flags = mdio->md_options & MD_FORCE; - /* Cast to pointer size, then to pointer to avoid warning */ - sc->pl_ptr = (u_char *)(uintptr_t)mdio->md_base; - sc->pl_len = (size_t)sc->mediasize; - return (0); -} - - static int mdcreate_malloc(struct md_s *sc, struct md_ioctl *mdio) { @@ -1238,8 +1217,12 @@ xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread error = mdcreate_malloc(sc, mdio); break; case MD_PRELOAD: - sc->start = mdstart_preload; - error = mdcreate_preload(sc, mdio); + /* + * We disallow attaching preloaded memory disks via + * ioctl. Preloaded memory disks are automatically + * attached in g_md_init(). + */ + error = EOPNOTSUPP; break; case MD_VNODE: sc->start = mdstart_vnode; |