Date: Thu, 13 Jun 2002 12:20:04 -0700 (PDT) From: Peter Edwards <peter.edwards@openet-telecom.com> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/37554: [PATCH] Make ELF shared libraries immutable once loaded (like executables) Message-ID: <200206131920.g5DJK4V67244@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/37554; it has been noted by GNATS. From: Peter Edwards <peter.edwards@openet-telecom.com> To: freebsd-gnats-submit@FreeBSD.org, pmedwards@eircom.net Cc: Subject: Re: kern/37554: [PATCH] Make ELF shared libraries immutable once loaded (like executables) Date: Thu, 13 Jun 2002 20:19:11 +0100 Hm. This is possibly a nicer way to do it, and certainly a smaller, if more intrusive, patch. It changes the semantics of mmap() somewhat, but I think in a reasonable way, and it avoids all that ugliness in the run-time linker. Basically, a request for PROT_EXEC on a regular file will cause it to become immutable: --- vm_mmap.c 3 Nov 2001 01:41:10 -0000 1.108.2.5 +++ vm_mmap.c 13 Jun 2002 19:15:28 -0000 @@ -406,8 +406,17 @@ error = vm_mmap(&vms->vm_map, &addr, size, prot, maxprot, flags, handle, pos); - if (error == 0) + if (error == 0) { p->p_retval[0] = (register_t) (addr + pageoff); + /* + * A successful map for a regular file, with execute access: + * mark the vnode immutable. + * XXX: GCC warns, but (handle == 0 || handle == vp) + * I'm not sure of the "correct" way to avoid this. + */ + if (handle && vp->v_type == VREG && (prot & PROT_EXEC)) + vp->v_flag |= VTEXT; + } done: if (fp) fdrop(fp, p); Of course, the utility of all this is questionable: I just wanted the functionality for something locally. Cheers, Peter To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200206131920.g5DJK4V67244>