aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Warzecha <Douglas_Warzecha@dell.com>2006-10-20 02:29:09 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-20 13:26:44 -0400
commitb95936cb9267e4c90a0b92361609ef5fd85a0a5f (patch)
treec6925759f6539a9f54fd20022a4f6bd79475cabc
parent1cd441f99819abdd2d919ff13e8c75af58a0fd9c (diff)
[PATCH] firmware/dcdbas: add size check in smi_data_write
Add a size check in smi_data_write to prevent possible wrapping problems with large pos values when calling smi_data_buf_realloc on 32-bit. Signed-off-by: Doug Warzecha <Douglas_Warzecha@dell.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/firmware/dcdbas.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/firmware/dcdbas.c b/drivers/firmware/dcdbas.c
index 8bcb58cd4ac0..1865b56fb141 100644
--- a/drivers/firmware/dcdbas.c
+++ b/drivers/firmware/dcdbas.c
@@ -8,7 +8,7 @@
8 * 8 *
9 * See Documentation/dcdbas.txt for more information. 9 * See Documentation/dcdbas.txt for more information.
10 * 10 *
11 * Copyright (C) 1995-2005 Dell Inc. 11 * Copyright (C) 1995-2006 Dell Inc.
12 * 12 *
13 * This program is free software; you can redistribute it and/or modify 13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License v2.0 as published by 14 * it under the terms of the GNU General Public License v2.0 as published by
@@ -40,7 +40,7 @@
40#include "dcdbas.h" 40#include "dcdbas.h"
41 41
42#define DRIVER_NAME "dcdbas" 42#define DRIVER_NAME "dcdbas"
43#define DRIVER_VERSION "5.6.0-2" 43#define DRIVER_VERSION "5.6.0-3.2"
44#define DRIVER_DESCRIPTION "Dell Systems Management Base Driver" 44#define DRIVER_DESCRIPTION "Dell Systems Management Base Driver"
45 45
46static struct platform_device *dcdbas_pdev; 46static struct platform_device *dcdbas_pdev;
@@ -175,6 +175,9 @@ static ssize_t smi_data_write(struct kobject *kobj, char *buf, loff_t pos,
175{ 175{
176 ssize_t ret; 176 ssize_t ret;
177 177
178 if ((pos + count) > MAX_SMI_DATA_BUF_SIZE)
179 return -EINVAL;
180
178 mutex_lock(&smi_data_lock); 181 mutex_lock(&smi_data_lock);
179 182
180 ret = smi_data_buf_realloc(pos + count); 183 ret = smi_data_buf_realloc(pos + count);