aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/ds.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-07-10 18:16:34 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2013-07-10 18:16:34 -0700
commitb4294eecb2785a3e1d4c8fde3403f4fc4ca2dc21 (patch)
treeec188fb597ecb1560041dc03c1777f7d2c9a9b4f /arch/sparc/kernel/ds.c
parentMerge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide (diff)
parent[PATCH] sparc32: vm_area_struct access for old Sun SPARCs. (diff)
downloadlinux-dev-b4294eecb2785a3e1d4c8fde3403f4fc4ca2dc21.tar.xz
linux-dev-b4294eecb2785a3e1d4c8fde3403f4fc4ca2dc21.zip
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc
Pull Sparc bugfixes from David Miller: "Four bug fixes: 1) Enable snoop tags properly on Sparc32/LEON, from Andreas Larsson 2) strcpy() length check fix from Chen Gang. 3) Forgotten unregister_netdev() in sunvnet driver, from Dave Kleikamp. 4) Fix broken assembler offsets used in vm_area_struct accesses on sparc32, from Olivier DANET." * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc: [PATCH] sparc32: vm_area_struct access for old Sun SPARCs. sunvnet: vnet_port_remove must call unregister_netdev sparc32, leon: Require separate snoop tags set to regard snooping to be enabled arch: sparc: kernel: check the memory length before use strcpy().
Diffstat (limited to 'arch/sparc/kernel/ds.c')
-rw-r--r--arch/sparc/kernel/ds.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/sparc/kernel/ds.c b/arch/sparc/kernel/ds.c
index 5ef48dab5636..11d460f6f9cc 100644
--- a/arch/sparc/kernel/ds.c
+++ b/arch/sparc/kernel/ds.c
@@ -783,6 +783,16 @@ void ldom_set_var(const char *var, const char *value)
char *base, *p;
int msg_len, loops;
+ if (strlen(var) + strlen(value) + 2 >
+ sizeof(pkt) - sizeof(pkt.header)) {
+ printk(KERN_ERR PFX
+ "contents length: %zu, which more than max: %lu,"
+ "so could not set (%s) variable to (%s).\n",
+ strlen(var) + strlen(value) + 2,
+ sizeof(pkt) - sizeof(pkt.header), var, value);
+ return;
+ }
+
memset(&pkt, 0, sizeof(pkt));
pkt.header.data.tag.type = DS_DATA;
pkt.header.data.handle = cp->handle;