summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/link_elf.c5
-rw-r--r--sys/kern/link_elf_obj.c4
2 files changed, 9 insertions, 0 deletions
diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c
index 3a959c9..89a8971 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 6bc62f7..95966c7 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) {
OpenPOWER on IntegriCloud