Date: Tue, 6 Nov 2012 20:27:52 +0200 From: Jaakko Heinonen <jh@FreeBSD.org> To: freebsd-hackers@FreeBSD.org Cc: filip.palian@pjwstk.edu.pl Subject: [patch] md(4) and preloaded memory disks Message-ID: <20121106182752.GB2234@a91-153-116-96.elisa-laajakaista.fi>
next in thread | raw e-mail | index | archive | help
Hi, I plan to commit the patch below to disallow attaching preloaded memory disks via ioctl. I didn't find anything that would really use this undocumented feature. --- Disallow attaching preloaded memory disks via ioctl. - The feature is dangerous because the kernel code doesn'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 %%% Index: sbin/mdconfig/mdconfig.c =================================================================== --- sbin/mdconfig/mdconfig.c (revision 242608) +++ sbin/mdconfig/mdconfig.c (working copy) @@ -84,7 +84,7 @@ usage(void) " mdconfig -r -u unit -s size [-o [no]force]\n" " mdconfig -l [-v] [-n] [-u unit]\n" " mdconfig file\n"); - fprintf(stderr, "\t\ttype = {malloc, preload, vnode, swap}\n"); + fprintf(stderr, "\t\ttype = {malloc, vnode, swap}\n"); fprintf(stderr, "\t\toption = {cluster, compress, reserve}\n"); fprintf(stderr, "\t\tsize = %%d (512 byte blocks), %%db (B),\n"); fprintf(stderr, "\t\t %%dk (kB), %%dm (MB), %%dg (GB) or\n"); @@ -148,8 +148,6 @@ main(int argc, char **argv) if (!strcmp(optarg, "malloc")) { mdio.md_type = MD_MALLOC; mdio.md_options |= MD_AUTOUNIT | MD_COMPRESS; - } else if (!strcmp(optarg, "preload")) { - mdio.md_type = MD_PRELOAD; } else if (!strcmp(optarg, "vnode")) { mdio.md_type = MD_VNODE; mdio.md_options |= MD_CLUSTER | MD_AUTOUNIT | MD_COMPRESS; Index: sys/dev/md/md.c =================================================================== --- sys/dev/md/md.c (revision 242608) +++ sys/dev/md/md.c (working copy) @@ -845,15 +845,20 @@ 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) { + /* + * Currently we disallow attaching preloaded memory disks via ioctl. + * Preloaded memory disks are automatically attached in mdinit(). + */ +#if 0 + /* + * XXX: We should check that the range they feed us is mapped and + * a valid memory disk. + * XXX: We should implement read-only. + */ if (mdio->md_options & ~(MD_AUTOUNIT | MD_FORCE)) return (EINVAL); if (mdio->md_base == 0) @@ -863,6 +868,9 @@ mdcreate_preload(struct md_s *sc, struct sc->pl_ptr = (u_char *)(uintptr_t)mdio->md_base; sc->pl_len = (size_t)sc->mediasize; return (0); +#else + return (EOPNOTSUPP); +#endif } %%% -- Jaakko
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20121106182752.GB2234>