+ binfmt_flat-dont-check-for-emfile.patch added to -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled

     binfmt_flat: don't check for EMFILE

has been added to the -mm tree.  Its filename is

     binfmt_flat-dont-check-for-emfile.patch

See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find
out what to do about this


From: Andrew Morton <akpm@xxxxxxxx>

Bernd Schmidt points out that binfmt_flat is now leaving the exec file open
while the application runs.  This offsets all the application's fd numbers. 
We should have closed the file within exec(), not at exit()-time.

But there doesn't seem to be a lot of point in doing all this just to avoid
going over RLIMIT_NOFILE by one fd for a few microseconds.  So take the EMFILE
checking out again.  This will cause binfmt_flat to again fail LTP's
exec-should-return-EMFILE-when-fdtable-is-full test.  That test appears to be
wrong anyway - Open Group specs say nothing about exec() returning EMFILE.

Cc: Bernd Schmidt <bernd.schmidt@xxxxxxxxxx>
Cc: Greg Ungerer <gerg@xxxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
---

 fs/binfmt_flat.c |   30 +++++++++---------------------
 1 files changed, 9 insertions(+), 21 deletions(-)

diff -puN fs/binfmt_flat.c~binfmt_flat-dont-check-for-emfile fs/binfmt_flat.c
--- devel/fs/binfmt_flat.c~binfmt_flat-dont-check-for-emfile	2006-05-16 07:42:55.000000000 -0700
+++ devel-akpm/fs/binfmt_flat.c	2006-05-16 07:44:07.000000000 -0700
@@ -428,7 +428,6 @@ static int load_flat_file(struct linux_b
 	loff_t fpos;
 	unsigned long start_code, end_code;
 	int ret;
-	int exec_fileno;
 
 	hdr = ((struct flat_hdr *) bprm->buf);		/* exec-header */
 	inode = bprm->file->f_dentry->d_inode;
@@ -502,21 +501,12 @@ static int load_flat_file(struct linux_b
 		goto err;
 	}
 
-	/* check file descriptor */
-	exec_fileno = get_unused_fd();
-	if (exec_fileno < 0) {
-		ret = -EMFILE;
-		goto err;
-	}
-	get_file(bprm->file);
-	fd_install(exec_fileno, bprm->file);
-
 	/* Flush all traces of the currently running executable */
 	if (id == 0) {
 		result = flush_old_exec(bprm);
 		if (result) {
 			ret = result;
-			goto err_close;
+			goto err;
 		}
 
 		/* OK, This is the point of no return */
@@ -548,7 +538,7 @@ static int load_flat_file(struct linux_b
 				textpos = (unsigned long) -ENOMEM;
 			printk("Unable to mmap process text, errno %d\n", (int)-textpos);
 			ret = textpos;
-			goto err_close;
+			goto err;
 		}
 
 		down_write(&current->mm->mmap_sem);
@@ -564,7 +554,7 @@ static int load_flat_file(struct linux_b
 					(int)-datapos);
 			do_munmap(current->mm, textpos, text_len);
 			ret = realdatastart;
-			goto err_close;
+			goto err;
 		}
 		datapos = realdatastart + MAX_SHARED_LIBS * sizeof(unsigned long);
 
@@ -587,7 +577,7 @@ static int load_flat_file(struct linux_b
 			do_munmap(current->mm, textpos, text_len);
 			do_munmap(current->mm, realdatastart, data_len + extra);
 			ret = result;
-			goto err_close;
+			goto err;
 		}
 
 		reloc = (unsigned long *) (datapos+(ntohl(hdr->reloc_start)-text_len));
@@ -606,7 +596,7 @@ static int load_flat_file(struct linux_b
 			printk("Unable to allocate RAM for process text/data, errno %d\n",
 					(int)-textpos);
 			ret = textpos;
-			goto err_close;
+			goto err;
 		}
 
 		realdatastart = textpos + ntohl(hdr->data_start);
@@ -652,7 +642,7 @@ static int load_flat_file(struct linux_b
 			do_munmap(current->mm, textpos, text_len + data_len + extra +
 				MAX_SHARED_LIBS * sizeof(unsigned long));
 			ret = result;
-			goto err_close;
+			goto err;
 		}
 	}
 
@@ -717,7 +707,7 @@ static int load_flat_file(struct linux_b
 				addr = calc_reloc(*rp, libinfo, id, 0);
 				if (addr == RELOC_FAILED) {
 					ret = -ENOEXEC;
-					goto err_close;
+					goto err;
 				}
 				*rp = addr;
 			}
@@ -747,7 +737,7 @@ static int load_flat_file(struct linux_b
 			rp = (unsigned long *) calc_reloc(addr, libinfo, id, 1);
 			if (rp == (unsigned long *)RELOC_FAILED) {
 				ret = -ENOEXEC;
-				goto err_close;
+				goto err;
 			}
 
 			/* Get the pointer's value.  */
@@ -762,7 +752,7 @@ static int load_flat_file(struct linux_b
 				addr = calc_reloc(addr, libinfo, id, 0);
 				if (addr == RELOC_FAILED) {
 					ret = -ENOEXEC;
-					goto err_close;
+					goto err;
 				}
 
 				/* Write back the relocated pointer.  */
@@ -783,8 +773,6 @@ static int load_flat_file(struct linux_b
 			stack_len);
 
 	return 0;
-err_close:
-	sys_close(exec_fileno);
 err:
 	return ret;
 }
_

Patches currently in -mm which might be from akpm@xxxxxxxx are

origin.patch
x86_64-dont-warn-for-overflow-in-nommu-case-when-dma_mask-is-32bit-fix.patch
git-acpi.patch
acpi-update-asus_acpi-driver-registration-fix.patch
catch-notification-of-memory-add-event-of-acpi-via-container-driver-register-start-func-for-memory-device.patch
catch-notification-of-memory-add-event-of-acpi-via-container-driveravoid-redundant-call-add_memory.patch
acpi-dock-driver-interface-fixups.patch
remove-for_each_cpu.patch
sony_apci-resume.patch
uninorth-agp-warning-fixes.patch
alpha-agp-warning-fix.patch
powernow-k8-crash-workaround.patch
gregkh-driver-platform_bus-learns-about-modalias-warning-fix.patch
gregkh-driver-warn-when-statically-allocated-kobjects-are-used-fix.patch
s3c24xx-hardware-spi-driver-tidy.patch
git-dvb.patch
scx200_acb-use-pci-i-o-resource-when-appropriate-fix.patch
w1-warning-fix.patch
git-gfs2.patch
git-ieee1394.patch
git-infiniband.patch
via-pmu-add-input-device-tidy.patch
git-klibc.patch
git-klibc-build-hacks.patch
git-hdrcleanup-fixup.patch
git-hdrcleanup-vs-git-klibc-on-ia64.patch
git-hdrcleanup-vs-git-klibc-on-ia64-2.patch
git-hdrinstall-fixup.patch
git-libata-all.patch
sdhci-truncated-pointer-fix.patch
git-mtd.patch
git-mtd-fixup.patch
git-netdev-all.patch
smc911x-Kconfig-fix.patch
pci-error-recovery-e1000-network-device-driver.patch
git-powerpc.patch
powerpc-kbuild-warning-fix.patch
git-rbtree.patch
git-sas.patch
gregkh-pci-pci-64-bit-resources-drivers-others-changes-amba-fix.patch
kconfigurable-resources-core-changes-i386-fix.patch
kconfigurable-resources-core-changes-fix.patch
kconfigurable-resources-arch-dependent-changes-arch-a-i-fix.patch
typesh-sector_t-and-blkcnt_t-arent-for-userspace.patch
qla2xxx-lock-ordering-fix-warning-fix.patch
areca-raid-linux-scsi-driver-update6-for-2617-rc1-mm3-externs-go-in-headers.patch
git-scsi-target-fixup.patch
git-watchdog.patch
revert-x86_64-mm-i386-prefer-tsc.patch
x86_64-mm-remove-un-set_nmi_callback-and-reserve-release_lapic_nmi-functions-x86-fix.patch
x86_64-mm-remove-un-set_nmi_callback-and-reserve-release_lapic_nmi-functions-x86-fix-fix.patch
x86_64-mm-remove-un-set_nmi_callback-and-reserve-release_lapic_nmi-functions-x86_64-fix.patch
xfs-sparc32-build-fix.patch
pg_uncached-is-ia64-only.patch
pgdat-allocation-for-new-node-add-specify-node-id-powerpc-fix.patch
pgdat-allocation-for-new-node-add-specify-node-id-tidy.patch
pgdat-allocation-for-new-node-add-specify-node-id-fix-3.patch
pgdat-allocation-for-new-node-add-get-node-id-by-acpi-tidy.patch
pgdat-allocation-for-new-node-add-generic-alloc-node_data-tidy.patch
pgdat-allocation-for-new-node-add-refresh-node_data-fix.patch
pgdat-allocation-for-new-node-add-export-kswapd-start-func-tidy.patch
catch-valid-mem-range-at-onlining-memory-tidy.patch
catch-valid-mem-range-at-onlining-memory-fix.patch
mm-introduce-remap_vmalloc_range-fix.patch
tracking-dirty-pages-in-shared-mappings-v4-fix2.patch
tracking-dirty-pages-in-shared-mappings-v4-fix3.patch
throttle-writers-of-shared-mappings-tidy.patch
acx1xx-wireless-driver.patch
dont-use-flush_tlb_all-in-suspend-time-tidy.patch
prune_one_dentry-tweaks.patch
mmput-might-sleep.patch
jbd-avoid-kfree-null.patch
ext3_clear_inode-avoid-kfree-null.patch
leds-amstrad-delta-led-support-tidy.patch
percpu-counter-data-type-changes-to-suppport-fix.patch
connector-exports.patch
config_net=n-build-fix.patch
jbd-split-checkpoint-lists-tidy.patch
mark-address_space_operations-const-fix.patch
mark-address_space_operations-const-fix-2.patch
allow-for-per-cpu-data-being-in-tdata-and-tbss-sections-fix.patch
allow-for-per-cpu-data-being-in-tdata-and-tbss-sections-tidy.patch
deprecate-smbfs-in-favour-of-cifs.patch
hptiop-highpoint-rocketraid-3xxx-controller-driver-list-locking.patch
hptiop-highpoint-rocketraid-3xxx-controller-driver-list-locking-updates.patch
hptiop-highpoint-rocketraid-3xxx-controller-driver-list-locking-updates-updates-2.patch
ufs-right-block-allocation-fixes.patch
sunsu-license-fix.patch
per-task-delay-accounting-proc-export-of-aggregated-block-i-o-delays-warning-fix.patch
hangcheck-remove-monotomic_clock-on-x86.patch
pi-futex-futex-code-cleanups-fix.patch
document-futex-pi-design-fix-fix.patch
mark-address_space_operations-const-vs-ecryptfs-mmap-operations.patch
ecryptfs-alpha-build-fix.patch
reiser4.patch
ide_dma_speed-fixes-warning-fix.patch
ide_dma_speed-fixes-tidy.patch
savagefb-add-state-save-and_restore-hooks-tidy.patch
kgdb-core-lite-add-reboot-command.patch
kgdb-8250-fix.patch
nr_blockdev_pages-in_interrupt-warning.patch
device-suspend-debug.patch
revert-tty-buffering-comment-out-debug-code.patch
slab-leaks3-default-y.patch
x86-kmap_atomic-debugging.patch
profile-likely-unlikely-macros-tidy.patch
profile-likely-unlikely-macros-fix.patch
profile-likely-unlikely-macros-fix-2.patch
binfmt_flat-dont-check-for-emfile.patch

-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux