mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
[Blackfin] arch: This allows XIP to work with FD-PIC.
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>
This commit is contained in:
parent
1ebc723cf0
commit
d5adb029ef
2 changed files with 9 additions and 2 deletions
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue