From 1f49b573e112e6e78a145c9a3cb7ea60b6c3ea85 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Sat, 15 Mar 2008 17:40:18 +0000 Subject: [PATCH] Fix panic on e.g. "kldload /dev/null". PR: kern/121427 Reviewed by: sem MFC after: 3 days --- sys/kern/link_elf.c | 5 +++++ sys/kern/link_elf_obj.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c index 3a959c90b1d..89a8971e798 100644 --- a/sys/kern/link_elf.c +++ b/sys/kern/link_elf.c @@ -571,6 +571,11 @@ link_elf_load_file(linker_class_t cls, const char* filename, return error; vfslocked = NDHASGIANT(&nd); NDFREE(&nd, NDF_ONLY_PNBUF); + if (nd.ni_vp->v_type != VREG) { + error = ENOEXEC; + firstpage = NULL; + goto out; + } #ifdef MAC error = mac_kld_check_load(curthread->td_ucred, nd.ni_vp); if (error) { diff --git a/sys/kern/link_elf_obj.c b/sys/kern/link_elf_obj.c index 6bc62f7f5d7..95966c7334c 100644 --- a/sys/kern/link_elf_obj.c +++ b/sys/kern/link_elf_obj.c @@ -409,6 +409,10 @@ link_elf_load_file(linker_class_t cls, const char *filename, return error; vfslocked = NDHASGIANT(&nd); NDFREE(&nd, NDF_ONLY_PNBUF); + if (nd.ni_vp->v_type != VREG) { + error = ENOEXEC; + goto out; + } #ifdef MAC error = mac_kld_check_load(td->td_ucred, nd.ni_vp); if (error) {