Date: Sun, 9 Nov 2003 19:52:19 -0800 (PST) From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 41859 for review Message-ID: <200311100352.hAA3qJO9066591@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=41859 Change 41859 by rwatson@rwatson_paprika on 2003/11/09 19:51:22 Use zone-allocated temporary label storage for mac_get_fs() and lmount(), rather than stack-allocated storage. GC old interfaces. Affected files ... .. //depot/projects/trustedbsd/sebsd/sys/kern/kern_mac.c#19 edit .. //depot/projects/trustedbsd/sebsd/sys/security/mac/mac_internal.h#8 edit .. //depot/projects/trustedbsd/sebsd/sys/security/mac/mac_vfs.c#7 edit Differences ... ==== //depot/projects/trustedbsd/sebsd/sys/kern/kern_mac.c#19 (text+ko) ==== @@ -916,7 +916,7 @@ { char *elements, *buffer; struct nameidata nd; - struct label intlabel; + struct label *intlabel; struct mac mac; int error; struct mount *mp; @@ -946,13 +946,13 @@ mp = nd.ni_vp->v_mount; - mac_init_mount_label(&intlabel); - mac_copy_mount_label(mp->mnt_mntlabel, &intlabel); - error = mac_externalize_mount_label(&intlabel, elements, buffer, + intlabel = mac_mount_label_alloc(); + mac_copy_mount_label(mp->mnt_mntlabel, intlabel); + error = mac_externalize_mount_label(intlabel, elements, buffer, mac.m_buflen, M_WAITOK); NDFREE(&nd, 0); - mac_destroy_mount_label(&intlabel); + mac_mount_label_free(intlabel); if (error == 0) error = copyout(buffer, mac.m_string, strlen(buffer)+1); @@ -1215,7 +1215,7 @@ char *buffer; int error; struct mac mac; - struct label intlabel; + struct label *intlabel; error = copyin(uap->mac_p, &mac, sizeof(mac)); if (error) @@ -1232,13 +1232,11 @@ return (error); } - mac_init_mount_label(&intlabel); - error = mac_internalize_mount_label(&intlabel, buffer); + intlabel = mac_mount_label_alloc(); + error = mac_internalize_mount_label(intlabel, buffer); free(buffer, M_MACTEMP); - if (error) { - mac_destroy_mount_label(&intlabel); - return (error); - } + if (error) + goto out; fstype = malloc(MFSNAMELEN, M_TEMP, M_WAITOK); fspath = malloc(MNAMELEN, M_TEMP, M_WAITOK); @@ -1251,9 +1249,12 @@ if (error == 0) error = copyinstr(uap->path, fspath, MNAMELEN, NULL); if (error == 0) - error = vfs_mount(td, fstype, fspath, uap->flags, uap->data, &intlabel); + error = vfs_mount(td, fstype, fspath, uap->flags, uap->data, + intlabel); free(fstype, M_TEMP); free(fspath, M_TEMP); +out: + mac_mount_label_free(intlabel); return (error); } ==== //depot/projects/trustedbsd/sebsd/sys/security/mac/mac_internal.h#8 (text+ko) ==== @@ -103,6 +103,8 @@ * the namespaces, etc, should work for these, so for now, sort by * object type. */ +struct label *mac_mount_label_alloc(void); +void mac_mount_label_free(struct label *label); struct label *mac_pipe_label_alloc(void); void mac_pipe_label_free(struct label *label); ==== //depot/projects/trustedbsd/sebsd/sys/security/mac/mac_vfs.c#7 (text+ko) ==== @@ -118,7 +118,7 @@ de->de_label = mac_devfsdirent_label_alloc(); } -static struct label * +struct label * mac_mount_label_alloc(void) { struct label *label; @@ -141,14 +141,6 @@ } void -mac_init_mount_label(struct label *label) -{ - - mac_init_label(label); - MAC_PERFORM(init_mount_label, label); -} - -void mac_init_mount(struct mount *mp) { @@ -191,7 +183,7 @@ de->de_label = NULL; } -static void +void mac_mount_label_free(struct label *label) { @@ -210,14 +202,6 @@ } void -mac_destroy_mount_label(struct label *label) -{ - - MAC_PERFORM(destroy_mount_label, label); - mac_destroy_label(label); -} - -void mac_destroy_mount(struct mount *mp) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200311100352.hAA3qJO9066591>