Skip to content

Commit

Permalink
[Blackfin] arch: This allows XIP to work with FD-PIC.
Browse files Browse the repository at this point in the history
Previously, init failed to do anything meaningful;
it turns out that the reason is that FD-PIC has a readonly data
section which can be located in the XIP filesystem, and various address checks
in the kernel reject such addresses for syscall arguments.  Hence, init's
  execve ("/bin/sh", ...)
failed with error code EFAULT.

There's room for improvement here: in case people want to have filesystems
on flash rather than in main memory, _access_ok should be modified to
allow this.

This bug fix is also dedicated to Michael Hennerich.

Signed-off-by: Bernd Schmidt <bernds_cb1@t-online.de>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
  • Loading branch information
Bernd Schmidt authored and Bryan Wu committed Apr 23, 2008
1 parent 1ebc723 commit d5adb02
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 2 deletions.
6 changes: 6 additions & 0 deletions arch/blackfin/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,12 @@ int _access_ok(unsigned long addr, unsigned long size)
return 1;
if (addr >= memory_mtd_end && (addr + size) <= physical_mem_end)
return 1;

#ifdef CONFIG_ROMFS_MTD_FS
/* For XIP, allow user space to use pointers within the ROMFS. */
if (addr >= memory_mtd_start && (addr + size) <= memory_mtd_end)
return 1;
#endif
#else
if (addr >= memory_start && (addr + size) <= physical_mem_end)
return 1;
Expand Down
5 changes: 3 additions & 2 deletions include/asm-blackfin/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,10 @@ static inline void wrusp(unsigned long usp)

/*
* User space process size: 1st byte beyond user address space.
* Fairly meaningless on nommu. Parts of user programs can be scattered
* in a lot of places, so just disable this by setting it to 0xFFFFFFFF.
*/
extern unsigned long memory_end;
#define TASK_SIZE (memory_end)
#define TASK_SIZE 0xFFFFFFFF

#ifdef __KERNEL__
#define STACK_TOP TASK_SIZE
Expand Down

0 comments on commit d5adb02

Please sign in to comment.