Skip to content

Commit

Permalink
[PARISC] Fix fs/binfmt_som.c
Browse files Browse the repository at this point in the history
Fix compilation (missing include of a.out.h)
Fix security hole (need to call unshare_files)

Signed-off-by: Matthew Wilcox <[email protected]>
Signed-off-by: Kyle McMartin <[email protected]>
  • Loading branch information
Matthew Wilcox authored and Matthew Wilcox committed Oct 4, 2006
1 parent 8d0b7d1 commit dc02747
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions fs/binfmt_som.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <linux/personality.h>
#include <linux/init.h>

#include <asm/a.out.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>

Expand Down Expand Up @@ -194,6 +195,7 @@ load_som_binary(struct linux_binprm * bprm, struct pt_regs * regs)
unsigned long som_entry;
struct som_hdr *som_ex;
struct som_exec_auxhdr *hpuxhdr;
struct files_struct *files;

/* Get the exec-header */
som_ex = (struct som_hdr *) bprm->buf;
Expand All @@ -208,15 +210,27 @@ load_som_binary(struct linux_binprm * bprm, struct pt_regs * regs)
size = som_ex->aux_header_size;
if (size > SOM_PAGESIZE)
goto out;
hpuxhdr = (struct som_exec_auxhdr *) kmalloc(size, GFP_KERNEL);
hpuxhdr = kmalloc(size, GFP_KERNEL);
if (!hpuxhdr)
goto out;

retval = kernel_read(bprm->file, som_ex->aux_header_location,
(char *) hpuxhdr, size);
if (retval != size) {
if (retval >= 0)
retval = -EIO;
goto out_free;
}

files = current->files; /* Refcounted so ok */
retval = unshare_files();
if (retval < 0)
goto out_free;
#error "Fix security hole before enabling me"
if (files == current->files) {
put_files_struct(files);
files = NULL;
}

retval = get_unused_fd();
if (retval < 0)
goto out_free;
Expand Down

0 comments on commit dc02747

Please sign in to comment.