diff options
-rw-r--r-- | drivers/char/agp/generic.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c index 850a643ad694..b072648dc3f6 100644 --- a/drivers/char/agp/generic.c +++ b/drivers/char/agp/generic.c | |||
@@ -1095,8 +1095,8 @@ int agp_generic_insert_memory(struct agp_memory * mem, off_t pg_start, int type) | |||
1095 | return -EINVAL; | 1095 | return -EINVAL; |
1096 | } | 1096 | } |
1097 | 1097 | ||
1098 | /* AK: could wrap */ | 1098 | if (((pg_start + mem->page_count) > num_entries) || |
1099 | if ((pg_start + mem->page_count) > num_entries) | 1099 | ((pg_start + mem->page_count) < pg_start)) |
1100 | return -EINVAL; | 1100 | return -EINVAL; |
1101 | 1101 | ||
1102 | j = pg_start; | 1102 | j = pg_start; |
@@ -1130,7 +1130,7 @@ int agp_generic_remove_memory(struct agp_memory *mem, off_t pg_start, int type) | |||
1130 | { | 1130 | { |
1131 | size_t i; | 1131 | size_t i; |
1132 | struct agp_bridge_data *bridge; | 1132 | struct agp_bridge_data *bridge; |
1133 | int mask_type; | 1133 | int mask_type, num_entries; |
1134 | 1134 | ||
1135 | bridge = mem->bridge; | 1135 | bridge = mem->bridge; |
1136 | if (!bridge) | 1136 | if (!bridge) |
@@ -1142,6 +1142,11 @@ int agp_generic_remove_memory(struct agp_memory *mem, off_t pg_start, int type) | |||
1142 | if (type != mem->type) | 1142 | if (type != mem->type) |
1143 | return -EINVAL; | 1143 | return -EINVAL; |
1144 | 1144 | ||
1145 | num_entries = agp_num_entries(); | ||
1146 | if (((pg_start + mem->page_count) > num_entries) || | ||
1147 | ((pg_start + mem->page_count) < pg_start)) | ||
1148 | return -EINVAL; | ||
1149 | |||
1145 | mask_type = bridge->driver->agp_type_to_mask_type(bridge, type); | 1150 | mask_type = bridge->driver->agp_type_to_mask_type(bridge, type); |
1146 | if (mask_type != 0) { | 1151 | if (mask_type != 0) { |
1147 | /* The generic routines know nothing of memory types */ | 1152 | /* The generic routines know nothing of memory types */ |