* [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* Re: [bug report] um: Convert ubd driver to blk-mq
2019-02-22 11:11 [bug report] um: Convert ubd driver to blk-mq Dan Carpenter
@ 2019-02-22 12:31 ` Anton Ivanov
0 siblings, 0 replies; 3+ messages in thread
From: Anton Ivanov @ 2019-02-22 12:31 UTC (permalink / raw)
To: Dan Carpenter, richard; +Cc: linux-um
On 22/02/2019 11:11, Dan Carpenter wrote:
> 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
>
Thanks Dan, will look into it today.
--
Anton R. Ivanov
Cambridgegreys Limited. Registered in England. Company Number 10273661
https://www.cambridgegreys.com/
_______________________________________________
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