linux-um archives
 help / color / mirror / Atom feed
* [bug report] um: Convert ubd driver to blk-mq
@ 2019-02-22 11:11 Dan Carpenter
  2019-02-22 12:31 ` Anton Ivanov
  0 siblings, 1 reply; 3+ messages in thread
From: Dan Carpenter @ 2019-02-22 11:11 UTC (permalink / raw)
  To: richard; +Cc: linux-um

Hello Richard Weinberger,

The patch 4e6da0fe8058: "um: Convert ubd driver to blk-mq" from Nov
26, 2017, leads to the following static checker warning:

	arch/um/drivers/ubd_kern.c:972 ubd_add()
	error: 'ubd_dev->queue' dereferencing possible ERR_PTR()

arch/um/drivers/ubd_kern.c
    911 static int ubd_add(int n, char **error_out)
    912 {
    913 	struct ubd *ubd_dev = &ubd_devs[n];
    914 	int err = 0;
    915 
    916 	if(ubd_dev->file == NULL)
    917 		goto out;
    918 
    919 	err = ubd_file_size(ubd_dev, &ubd_dev->size);
    920 	if(err < 0){
    921 		*error_out = "Couldn't determine size of device's file";
    922 		goto out;
    923 	}
    924 
    925 	ubd_dev->size = ROUND_BLOCK(ubd_dev->size);
    926 
    927 	ubd_dev->tag_set.ops = &ubd_mq_ops;
    928 	ubd_dev->tag_set.queue_depth = 64;
    929 	ubd_dev->tag_set.numa_node = NUMA_NO_NODE;
    930 	ubd_dev->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
    931 	ubd_dev->tag_set.driver_data = ubd_dev;
    932 	ubd_dev->tag_set.nr_hw_queues = 1;
    933 
    934 	err = blk_mq_alloc_tag_set(&ubd_dev->tag_set);
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
We do want to clean up this allocation.

    935 	if (err)
    936 		goto out;
    937 
    938 	ubd_dev->queue = blk_mq_init_queue(&ubd_dev->tag_set);
    939 	if (IS_ERR(ubd_dev->queue)) {
    940 		err = PTR_ERR(ubd_dev->queue);
    941 		goto out_cleanup;
                        ^^^^^^^^^^^^^^^^
But this goto will Oops.

    942 	}
    943 
    944 	ubd_dev->queue->queuedata = ubd_dev;
    945 	blk_queue_write_cache(ubd_dev->queue, true, false);
    946 
    947 	blk_queue_max_segments(ubd_dev->queue, MAX_SG);
    948 	err = ubd_disk_register(UBD_MAJOR, ubd_dev->size, n, &ubd_gendisk[n]);
    949 	if(err){
    950 		*error_out = "Failed to register device";
    951 		goto out_cleanup_tags;
    952 	}
    953 
    954 	if (fake_major != UBD_MAJOR)
    955 		ubd_disk_register(fake_major, ubd_dev->size, n,
    956 				  &fake_gendisk[n]);
    957 
    958 	/*
    959 	 * Perhaps this should also be under the "if (fake_major)" above
    960 	 * using the fake_disk->disk_name
    961 	 */
    962 	if (fake_ide)
    963 		make_ide_entries(ubd_gendisk[n]->disk_name);
    964 
    965 	err = 0;
    966 out:
    967 	return err;
    968 
    969 out_cleanup_tags:
    970 	blk_mq_free_tag_set(&ubd_dev->tag_set);
    971 out_cleanup:
--> 972 	blk_cleanup_queue(ubd_dev->queue);
                                  ^^^^^^^^^^^^^^

    973 	goto out;
    974 }

regards,
dan carpenter

_______________________________________________
linux-um mailing list
linux-um@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um


^ permalink raw reply	[flat|nested] 3+ messages in thread
* [bug report] um: Convert ubd driver to blk-mq
@ 2018-10-17  9:26 Dan Carpenter
  0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2018-10-17  9:26 UTC (permalink / raw)
  To: richard; +Cc: linux-um

Hello Richard Weinberger,

The patch 4e6da0fe8058: "um: Convert ubd driver to blk-mq" from Nov
26, 2017, leads to the following static checker warning:

	arch/um/drivers/ubd_kern.c:963 ubd_add()
	error: 'ubd_dev->queue' dereferencing possible ERR_PTR()

arch/um/drivers/ubd_kern.c
   921          ubd_dev->tag_set.cmd_size = sizeof(struct ubd_pdu);
   922          ubd_dev->tag_set.driver_data = ubd_dev;
   923          ubd_dev->tag_set.nr_hw_queues = 1;
   924  
   925          err = blk_mq_alloc_tag_set(&ubd_dev->tag_set);
   926          if (err)
   927                  goto out;
   928  
   929          ubd_dev->queue = blk_mq_init_queue(&ubd_dev->tag_set);
   930          if (IS_ERR(ubd_dev->queue)) {
   931                  err = PTR_ERR(ubd_dev->queue);
   932                  goto out_cleanup;
                        ^^^^^^^^^^^^^^^^^

   933          }
   934  
   935          ubd_dev->queue->queuedata = ubd_dev;
   936          blk_queue_write_cache(ubd_dev->queue, true, false);
   937  
   938          blk_queue_max_segments(ubd_dev->queue, MAX_SG);
   939          err = ubd_disk_register(UBD_MAJOR, ubd_dev->size, n, &ubd_gendisk[n]);
   940          if(err){
   941                  *error_out = "Failed to register device";
   942                  goto out_cleanup_tags;
   943          }
   944  
   945          if (fake_major != UBD_MAJOR)
   946                  ubd_disk_register(fake_major, ubd_dev->size, n,
   947                                    &fake_gendisk[n]);
   948  
   949          /*
   950           * Perhaps this should also be under the "if (fake_major)" above
   951           * using the fake_disk->disk_name
   952           */
   953          if (fake_ide)
   954                  make_ide_entries(ubd_gendisk[n]->disk_name);
   955  
   956          err = 0;
   957  out:
   958          return err;
   959  
   960  out_cleanup_tags:
   961          blk_mq_free_tag_set(&ubd_dev->tag_set);
   962  out_cleanup:
   963          blk_cleanup_queue(ubd_dev->queue);
                                  ^^^^^^^^^^^^^^
Dereferenced inside the function.

   964          goto out;
   965  }

regards,
dan carpenter

_______________________________________________
linux-um mailing list
linux-um@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-02-22 13:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-02-22 11:11 [bug report] um: Convert ubd driver to blk-mq Dan Carpenter
2019-02-22 12:31 ` Anton Ivanov
  -- strict thread matches above, loose matches on Subject: below --
2018-10-17  9:26 Dan Carpenter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox