link_elf_obj.c (231949) | link_elf_obj.c (241896) |
---|---|
1/*- 2 * Copyright (c) 1998-2000 Doug Rabson 3 * Copyright (c) 2004 Peter Wemm 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1998-2000 Doug Rabson 3 * Copyright (c) 2004 Peter Wemm 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> |
29__FBSDID("$FreeBSD: head/sys/kern/link_elf_obj.c 231949 2012-02-21 01:05:12Z kib $"); | 29__FBSDID("$FreeBSD: head/sys/kern/link_elf_obj.c 241896 2012-10-22 17:50:54Z kib $"); |
30 31#include "opt_ddb.h" 32 33#include <sys/param.h> 34#include <sys/systm.h> 35#include <sys/kernel.h> 36#include <sys/lock.h> 37#include <sys/malloc.h> --- 407 unchanged lines hidden (view full) --- 445 elf_file_t ef; 446 linker_file_t lf; 447 int symtabindex; 448 int symstrindex; 449 int shstrindex; 450 int nsym; 451 int pb, rl, ra; 452 int alignmask; | 30 31#include "opt_ddb.h" 32 33#include <sys/param.h> 34#include <sys/systm.h> 35#include <sys/kernel.h> 36#include <sys/lock.h> 37#include <sys/malloc.h> --- 407 unchanged lines hidden (view full) --- 445 elf_file_t ef; 446 linker_file_t lf; 447 int symtabindex; 448 int symstrindex; 449 int shstrindex; 450 int nsym; 451 int pb, rl, ra; 452 int alignmask; |
453 int vfslocked; | |
454 455 shdr = NULL; 456 lf = NULL; 457 mapsize = 0; 458 hdr = NULL; 459 | 453 454 shdr = NULL; 455 lf = NULL; 456 mapsize = 0; 457 hdr = NULL; 458 |
460 NDINIT(&nd, LOOKUP, FOLLOW | MPSAFE, UIO_SYSSPACE, filename, td); | 459 NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, filename, td); |
461 flags = FREAD; 462 error = vn_open(&nd, &flags, 0, NULL); 463 if (error) 464 return error; | 460 flags = FREAD; 461 error = vn_open(&nd, &flags, 0, NULL); 462 if (error) 463 return error; |
465 vfslocked = NDHASGIANT(&nd); | |
466 NDFREE(&nd, NDF_ONLY_PNBUF); 467 if (nd.ni_vp->v_type != VREG) { 468 error = ENOEXEC; 469 goto out; 470 } 471#ifdef MAC 472 error = mac_kld_check_load(td->td_ucred, nd.ni_vp); 473 if (error) { --- 387 unchanged lines hidden (view full) --- 861 if (error) 862 goto out; 863 864 *result = lf; 865 866out: 867 VOP_UNLOCK(nd.ni_vp, 0); 868 vn_close(nd.ni_vp, FREAD, td->td_ucred, td); | 464 NDFREE(&nd, NDF_ONLY_PNBUF); 465 if (nd.ni_vp->v_type != VREG) { 466 error = ENOEXEC; 467 goto out; 468 } 469#ifdef MAC 470 error = mac_kld_check_load(td->td_ucred, nd.ni_vp); 471 if (error) { --- 387 unchanged lines hidden (view full) --- 859 if (error) 860 goto out; 861 862 *result = lf; 863 864out: 865 VOP_UNLOCK(nd.ni_vp, 0); 866 vn_close(nd.ni_vp, FREAD, td->td_ucred, td); |
869 VFS_UNLOCK_GIANT(vfslocked); | |
870 if (error && lf) 871 linker_file_unload(lf, LINKER_UNLOAD_FORCE); 872 if (hdr) 873 free(hdr, M_LINKER); 874 875 return error; 876} 877 --- 501 unchanged lines hidden --- | 867 if (error && lf) 868 linker_file_unload(lf, LINKER_UNLOAD_FORCE); 869 if (hdr) 870 free(hdr, M_LINKER); 871 872 return error; 873} 874 --- 501 unchanged lines hidden --- |