File tree Expand file tree Collapse file tree 1 file changed +12
-3
lines changed Expand file tree Collapse file tree 1 file changed +12
-3
lines changed Original file line number Diff line number Diff line change @@ -504,15 +504,19 @@ static struct vector_queue *create_queue(
504
504
505
505
result = kmalloc (sizeof (struct vector_queue ), GFP_KERNEL );
506
506
if (result == NULL )
507
- goto out_fail ;
507
+ return NULL ;
508
508
result -> max_depth = max_size ;
509
509
result -> dev = vp -> dev ;
510
510
result -> mmsg_vector = kmalloc (
511
511
(sizeof (struct mmsghdr ) * max_size ), GFP_KERNEL );
512
+ if (result -> mmsg_vector == NULL )
513
+ goto out_mmsg_fail ;
512
514
result -> skbuff_vector = kmalloc (
513
515
(sizeof (void * ) * max_size ), GFP_KERNEL );
514
- if (result -> mmsg_vector == NULL || result -> skbuff_vector == NULL )
515
- goto out_fail ;
516
+ if (result -> skbuff_vector == NULL )
517
+ goto out_skb_fail ;
518
+
519
+ /* further failures can be handled safely by destroy_queue*/
516
520
517
521
mmsg_vector = result -> mmsg_vector ;
518
522
for (i = 0 ; i < max_size ; i ++ ) {
@@ -563,6 +567,11 @@ static struct vector_queue *create_queue(
563
567
result -> head = 0 ;
564
568
result -> tail = 0 ;
565
569
return result ;
570
+ out_skb_fail :
571
+ kfree (result -> mmsg_vector );
572
+ out_mmsg_fail :
573
+ kfree (result );
574
+ return NULL ;
566
575
out_fail :
567
576
destroy_queue (result );
568
577
return NULL ;
You can’t perform that action at this time.
0 commit comments