diff options
author | Doug Warzecha <Douglas_Warzecha@dell.com> | 2006-10-20 02:29:09 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-20 13:26:44 -0400 |
commit | b95936cb9267e4c90a0b92361609ef5fd85a0a5f (patch) | |
tree | c6925759f6539a9f54fd20022a4f6bd79475cabc /drivers | |
parent | 1cd441f99819abdd2d919ff13e8c75af58a0fd9c (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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/firmware/dcdbas.c | 7 |
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 | ||
46 | static struct platform_device *dcdbas_pdev; | 46 | static 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); |