Commit 454859c5 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'arc-5.12-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc

Pull ARC fixlets from Vineet Gupta:
 "A few straggler fixes for ARC"

* tag 'arc-5.12-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
  ARC: treewide: avoid the pointer addition with NULL pointer
  arc: kernel: Return -EFAULT if copy_to_user() fails
  ARC: haps: bump memory to 1 GB
parents 3a229812 83520d62
...@@ -16,7 +16,7 @@ / { ...@@ -16,7 +16,7 @@ / {
memory { memory {
device_type = "memory"; device_type = "memory";
/* CONFIG_LINUX_RAM_BASE needs to match low mem start */ /* CONFIG_LINUX_RAM_BASE needs to match low mem start */
reg = <0x0 0x80000000 0x0 0x20000000 /* 512 MB low mem */ reg = <0x0 0x80000000 0x0 0x40000000 /* 1 GB low mem */
0x1 0x00000000 0x0 0x40000000>; /* 1 GB highmem */ 0x1 0x00000000 0x0 0x40000000>; /* 1 GB highmem */
}; };
......
...@@ -96,7 +96,7 @@ stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs *regs, ...@@ -96,7 +96,7 @@ stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs *regs,
sizeof(sf->uc.uc_mcontext.regs.scratch)); sizeof(sf->uc.uc_mcontext.regs.scratch));
err |= __copy_to_user(&sf->uc.uc_sigmask, set, sizeof(sigset_t)); err |= __copy_to_user(&sf->uc.uc_sigmask, set, sizeof(sigset_t));
return err; return err ? -EFAULT : 0;
} }
static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf) static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf)
...@@ -110,7 +110,7 @@ static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf) ...@@ -110,7 +110,7 @@ static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf)
&(sf->uc.uc_mcontext.regs.scratch), &(sf->uc.uc_mcontext.regs.scratch),
sizeof(sf->uc.uc_mcontext.regs.scratch)); sizeof(sf->uc.uc_mcontext.regs.scratch));
if (err) if (err)
return err; return -EFAULT;
set_current_blocked(&set); set_current_blocked(&set);
regs->bta = uregs.scratch.bta; regs->bta = uregs.scratch.bta;
......
...@@ -187,25 +187,26 @@ static void init_unwind_table(struct unwind_table *table, const char *name, ...@@ -187,25 +187,26 @@ static void init_unwind_table(struct unwind_table *table, const char *name,
const void *table_start, unsigned long table_size, const void *table_start, unsigned long table_size,
const u8 *header_start, unsigned long header_size) const u8 *header_start, unsigned long header_size)
{ {
const u8 *ptr = header_start + 4;
const u8 *end = header_start + header_size;
table->core.pc = (unsigned long)core_start; table->core.pc = (unsigned long)core_start;
table->core.range = core_size; table->core.range = core_size;
table->init.pc = (unsigned long)init_start; table->init.pc = (unsigned long)init_start;
table->init.range = init_size; table->init.range = init_size;
table->address = table_start; table->address = table_start;
table->size = table_size; table->size = table_size;
/* To avoid the pointer addition with NULL pointer.*/
if (header_start != NULL) {
const u8 *ptr = header_start + 4;
const u8 *end = header_start + header_size;
/* See if the linker provided table looks valid. */ /* See if the linker provided table looks valid. */
if (header_size <= 4 if (header_size <= 4
|| header_start[0] != 1 || header_start[0] != 1
|| (void *)read_pointer(&ptr, end, header_start[1]) != table_start || (void *)read_pointer(&ptr, end, header_start[1])
!= table_start
|| header_start[2] == DW_EH_PE_omit || header_start[2] == DW_EH_PE_omit
|| read_pointer(&ptr, end, header_start[2]) <= 0 || read_pointer(&ptr, end, header_start[2]) <= 0
|| header_start[3] == DW_EH_PE_omit) || header_start[3] == DW_EH_PE_omit)
header_start = NULL; header_start = NULL;
}
table->hdrsz = header_size; table->hdrsz = header_size;
smp_wmb(); smp_wmb();
table->header = header_start; table->header = header_start;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment