Skip to contentSkip to conversation

2.6.6 memory allocation checks in SliceBlock()

PATCH In review Yury Umanets 2 participants 3 messages Jun 6, 2004 – Jun 7, 2004

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 2.6.6 memory allocation checks in SliceBlock()

Adds memory allocation checks in SliceBlock()

 ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c |    4 ++++
 1 files changed, 4 insertions(+)

diff -rupN ./linux-2.6.6/drivers/char/drm/sis_ds.c ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c
--- ./linux-2.6.6/drivers/char/drm/sis_ds.c Mon May 10 05:33:19 2004
+++ ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c Wed Jun 2 14:19:22
2004
@@ -231,6 +231,8 @@ static TMemBlock* SliceBlock(TMemBlock *
if (startofs > p->ofs) {
newblock = (TMemBlock*) DRM(calloc)(1, sizeof(TMemBlock),
DRM_MEM_DRIVER);
+ if (!newblock)
+ return NULL;
newblock->ofs = startofs;
newblock->size = p->size - (startofs - p->ofs); newblock->free = 1;
@@ -244,6 +246,8 @@ static TMemBlock* SliceBlock(TMemBlock *
if (size < p->size) {
newblock = (TMemBlock*) DRM(calloc)(1, sizeof(TMemBlock),
DRM_MEM_DRIVER);
+ if (!newblock)
+ return NULL;
newblock->ofs = startofs + size; newblock->size = p->size - size; newblock->free = 1;

Signature · 1 line
umka
#1 lore raw

On Sun, 06 Jun 2004 19:23:12 +0300 Yury Umanets wrote:

| Adds memory allocation checks in SliceBlock()
| 
|  ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c |    4 ++++
|  1 files changed, 4 insertions(+)
| 
| Signed-off-by: Yury Umanets <[email protected]>
| 
| diff -rupN ./linux-2.6.6/drivers/char/drm/sis_ds.c
| ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c
| --- ./linux-2.6.6/drivers/char/drm/sis_ds.c	Mon May 10 05:33:19 2004
| +++ ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c	Wed Jun  2 14:19:22
| 2004
| @@ -231,6 +231,8 @@ static TMemBlock* SliceBlock(TMemBlock *
|  	if (startofs > p->ofs) {
|  		newblock = (TMemBlock*) DRM(calloc)(1, sizeof(TMemBlock),
|  		    DRM_MEM_DRIVER);
| +		if (!newblock)
| +			return NULL;
|  		newblock->ofs = startofs;
|  		newblock->size = p->size - (startofs - p->ofs);
|  		newblock->free = 1;
| @@ -244,6 +246,8 @@ static TMemBlock* SliceBlock(TMemBlock *
|  	if (size < p->size) {
|  		newblock = (TMemBlock*) DRM(calloc)(1, sizeof(TMemBlock),
|  		    DRM_MEM_DRIVER);
| +		if (!newblock)
| +			return NULL;
|  		newblock->ofs = startofs + size;
|  		newblock->size = p->size - size;
|  		newblock->free = 1;
| 
| -- 

These look like the right thing to do, but one caller of SliceBlock() has no error handling:

mmAllocMem():

	p = SliceBlock(p,startofs,size,0,mask+1);
	p->heap = heap;
	return p;

However, callers of mmAllocMem() do have failure handling.

--
~Randy

#2 lore raw
Quoted 38 lines · Randy.Dunlap

On Sun, 06 Jun 2004 19:23:12 +0300 Yury Umanets wrote:

| Adds memory allocation checks in SliceBlock()
| 
|  ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c |    4 ++++
|  1 files changed, 4 insertions(+)
| 
| Signed-off-by: Yury Umanets <[email protected]>
| 
| diff -rupN ./linux-2.6.6/drivers/char/drm/sis_ds.c
| ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c
| --- ./linux-2.6.6/drivers/char/drm/sis_ds.c	Mon May 10 05:33:19 2004
| +++ ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c	Wed Jun  2 14:19:22
| 2004
| @@ -231,6 +231,8 @@ static TMemBlock* SliceBlock(TMemBlock *
|  	if (startofs > p->ofs) {
|  		newblock = (TMemBlock*) DRM(calloc)(1, sizeof(TMemBlock),
|  		    DRM_MEM_DRIVER);
| +		if (!newblock)
| +			return NULL;
|  		newblock->ofs = startofs;
|  		newblock->size = p->size - (startofs - p->ofs);
|  		newblock->free = 1;
| @@ -244,6 +246,8 @@ static TMemBlock* SliceBlock(TMemBlock *
|  	if (size < p->size) {
|  		newblock = (TMemBlock*) DRM(calloc)(1, sizeof(TMemBlock),
|  		    DRM_MEM_DRIVER);
| +		if (!newblock)
| +			return NULL;
|  		newblock->ofs = startofs + size;
|  		newblock->size = p->size - size;
|  		newblock->free = 1;
| 
| -- 

These look like the right thing to do, but one caller of SliceBlock() has no error handling:

Quoted 7 lines

mmAllocMem():

	p = SliceBlock(p,startofs,size,0,mask+1);
	p->heap = heap;
	return p;

However, callers of mmAllocMem() do have failure handling.

Hello Randy,

This is fixed version:

 ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c |    6 ++++++
 1 files changed, 6 insertions(+)

diff -rupN ./linux-2.6.6/drivers/char/drm/sis_ds.c ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c
--- ./linux-2.6.6/drivers/char/drm/sis_ds.c Mon May 10 05:33:19 2004
+++ ./linux-2.6.6-modified/drivers/char/drm/sis_ds.c Mon Jun 7 18:41:41
2004
@@ -231,6 +231,8 @@ static TMemBlock* SliceBlock(TMemBlock *
if (startofs > p->ofs) {
newblock = (TMemBlock*) DRM(calloc)(1, sizeof(TMemBlock),
DRM_MEM_DRIVER);
+ if (!newblock)
+ return NULL;
newblock->ofs = startofs;
newblock->size = p->size - (startofs - p->ofs); newblock->free = 1;
@@ -244,6 +246,8 @@ static TMemBlock* SliceBlock(TMemBlock *
if (size < p->size) {
newblock = (TMemBlock*) DRM(calloc)(1, sizeof(TMemBlock),
DRM_MEM_DRIVER);
+ if (!newblock)
+ return NULL;
newblock->ofs = startofs + size; newblock->size = p->size - size; newblock->free = 1;
@@ -285,6 +289,8 @@ PMemBlock mmAllocMem( memHeap_t *heap, i
if (p == NULL)
return NULL;
p = SliceBlock(p,startofs,size,0,mask+1);
+ if (!p)
+ return NULL;
p->heap = heap;
return p;
}

Signature · 1 line
umka