Deleted Added
full compact
linux_misc.c (241025) linux_misc.c (241896)
1/*-
2 * Copyright (c) 2002 Doug Rabson
3 * Copyright (c) 1994-1995 S��ren Schmidt
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:

--- 14 unchanged lines hidden (view full) ---

23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2002 Doug Rabson
3 * Copyright (c) 1994-1995 S��ren Schmidt
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:

--- 14 unchanged lines hidden (view full) ---

23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#include <sys/cdefs.h>
31__FBSDID("$FreeBSD: head/sys/compat/linux/linux_misc.c 241025 2012-09-28 11:25:02Z kib $");
31__FBSDID("$FreeBSD: head/sys/compat/linux/linux_misc.c 241896 2012-10-22 17:50:54Z kib $");
32
33#include "opt_compat.h"
34#include "opt_kdtrace.h"
35
36#include <sys/param.h>
37#include <sys/blist.h>
38#include <sys/fcntl.h>
39#if defined(__i386__)

--- 202 unchanged lines hidden (view full) ---

242 struct exec *a_out;
243 struct vattr attr;
244 vm_offset_t vmaddr;
245 unsigned long file_offset;
246 unsigned long bss_size;
247 char *library;
248 ssize_t aresid;
249 int error;
32
33#include "opt_compat.h"
34#include "opt_kdtrace.h"
35
36#include <sys/param.h>
37#include <sys/blist.h>
38#include <sys/fcntl.h>
39#if defined(__i386__)

--- 202 unchanged lines hidden (view full) ---

242 struct exec *a_out;
243 struct vattr attr;
244 vm_offset_t vmaddr;
245 unsigned long file_offset;
246 unsigned long bss_size;
247 char *library;
248 ssize_t aresid;
249 int error;
250 int locked, vfslocked;
250 int locked;
251
252 LCONVPATHEXIST(td, args->library, &library);
253
254#ifdef DEBUG
255 if (ldebug(uselib))
256 printf(ARGS(uselib, "%s"), library);
257#endif
258
259 a_out = NULL;
251
252 LCONVPATHEXIST(td, args->library, &library);
253
254#ifdef DEBUG
255 if (ldebug(uselib))
256 printf(ARGS(uselib, "%s"), library);
257#endif
258
259 a_out = NULL;
260 vfslocked = 0;
261 locked = 0;
262 vp = NULL;
263
260 locked = 0;
261 vp = NULL;
262
264 NDINIT(&ni, LOOKUP, ISOPEN | FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
263 NDINIT(&ni, LOOKUP, ISOPEN | FOLLOW | LOCKLEAF | AUDITVNODE1,
265 UIO_SYSSPACE, library, td);
266 error = namei(&ni);
267 LFREEPATH(library);
268 if (error)
269 goto cleanup;
270
271 vp = ni.ni_vp;
264 UIO_SYSSPACE, library, td);
265 error = namei(&ni);
266 LFREEPATH(library);
267 if (error)
268 goto cleanup;
269
270 vp = ni.ni_vp;
272 vfslocked = NDHASGIANT(&ni);
273 NDFREE(&ni, NDF_ONLY_PNBUF);
274
275 /*
276 * From here on down, we have a locked vnode that must be unlocked.
277 * XXX: The code below largely duplicates exec_check_permissions().
278 */
279 locked = 1;
280

--- 107 unchanged lines hidden (view full) ---

388 */
389 VOP_SET_TEXT(vp);
390
391 /*
392 * Lock no longer needed
393 */
394 locked = 0;
395 VOP_UNLOCK(vp, 0);
271 NDFREE(&ni, NDF_ONLY_PNBUF);
272
273 /*
274 * From here on down, we have a locked vnode that must be unlocked.
275 * XXX: The code below largely duplicates exec_check_permissions().
276 */
277 locked = 1;
278

--- 107 unchanged lines hidden (view full) ---

386 */
387 VOP_SET_TEXT(vp);
388
389 /*
390 * Lock no longer needed
391 */
392 locked = 0;
393 VOP_UNLOCK(vp, 0);
396 VFS_UNLOCK_GIANT(vfslocked);
397
398 /*
399 * Check if file_offset page aligned. Currently we cannot handle
400 * misalinged file offsets, and so we read in the entire image
401 * (what a waste).
402 */
403 if (file_offset & PAGE_MASK) {
404#ifdef DEBUG

--- 53 unchanged lines hidden (view full) ---

458 error = vm_map_find(&td->td_proc->p_vmspace->vm_map, NULL, 0,
459 &vmaddr, bss_size, FALSE, VM_PROT_ALL, VM_PROT_ALL, 0);
460 if (error)
461 goto cleanup;
462 }
463
464cleanup:
465 /* Unlock vnode if needed */
394
395 /*
396 * Check if file_offset page aligned. Currently we cannot handle
397 * misalinged file offsets, and so we read in the entire image
398 * (what a waste).
399 */
400 if (file_offset & PAGE_MASK) {
401#ifdef DEBUG

--- 53 unchanged lines hidden (view full) ---

455 error = vm_map_find(&td->td_proc->p_vmspace->vm_map, NULL, 0,
456 &vmaddr, bss_size, FALSE, VM_PROT_ALL, VM_PROT_ALL, 0);
457 if (error)
458 goto cleanup;
459 }
460
461cleanup:
462 /* Unlock vnode if needed */
466 if (locked) {
463 if (locked)
467 VOP_UNLOCK(vp, 0);
464 VOP_UNLOCK(vp, 0);
468 VFS_UNLOCK_GIANT(vfslocked);
469 }
470
471 /* Release the temporary mapping. */
472 if (a_out)
473 kmem_free_wakeup(exec_map, (vm_offset_t)a_out, PAGE_SIZE);
474
475 return (error);
476}
477

--- 1453 unchanged lines hidden ---
465
466 /* Release the temporary mapping. */
467 if (a_out)
468 kmem_free_wakeup(exec_map, (vm_offset_t)a_out, PAGE_SIZE);
469
470 return (error);
471}
472

--- 1453 unchanged lines hidden ---