diff mbox series

Bluetooth: hci_core: Use ERR_PTR instead of NULL

Message ID 20220717133759.8479-1-khalid.masum.92@gmail.com (mailing list archive)
State New, archived
Headers show
Series Bluetooth: hci_core: Use ERR_PTR instead of NULL | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
tedd_an/checkpatch success Checkpatch PASS
tedd_an/gitlint success Gitlint PASS
tedd_an/subjectprefix success PASS
tedd_an/buildkernel success Build Kernel PASS
tedd_an/buildkernel32 success Build Kernel32 PASS
tedd_an/incremental_build success Pass
tedd_an/testrunnersetup success Test Runner Setup PASS
tedd_an/testrunnerl2cap-tester success Total: 40, Passed: 40 (100.0%), Failed: 0, Not Run: 0
tedd_an/testrunnerbnep-tester success Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0
tedd_an/testrunnermgmt-tester success Total: 494, Passed: 494 (100.0%), Failed: 0, Not Run: 0
tedd_an/testrunnerrfcomm-tester success Total: 10, Passed: 10 (100.0%), Failed: 0, Not Run: 0
tedd_an/testrunnersco-tester success Total: 12, Passed: 12 (100.0%), Failed: 0, Not Run: 0
tedd_an/testrunnersmp-tester success Total: 8, Passed: 8 (100.0%), Failed: 0, Not Run: 0
tedd_an/testrunneruserchan-tester success Total: 4, Passed: 4 (100.0%), Failed: 0, Not Run: 0

Commit Message

Khalid Masum July 17, 2022, 1:37 p.m. UTC
Failure of kzalloc to allocate memory is not reported. Return Error
pointer to ENOMEM if memory allocation fails. This will increase
readability and will make the function easier to use in future.

Signed-off-by: Khalid Masum <khalid.masum.92@gmail.com>
---
 drivers/bluetooth/btusb.c | 4 ++--
 net/bluetooth/hci_core.c  | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

Comments

bluez.test.bot@gmail.com July 17, 2022, 2:04 p.m. UTC | #1
This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=660435

---Test result---

Test Summary:
CheckPatch                    PASS      1.44 seconds
GitLint                       PASS      0.84 seconds
SubjectPrefix                 PASS      0.65 seconds
BuildKernel                   PASS      31.55 seconds
BuildKernel32                 PASS      27.58 seconds
Incremental Build with patchesPASS      37.85 seconds
TestRunner: Setup             PASS      468.67 seconds
TestRunner: l2cap-tester      PASS      16.39 seconds
TestRunner: bnep-tester       PASS      5.54 seconds
TestRunner: mgmt-tester       PASS      94.94 seconds
TestRunner: rfcomm-tester     PASS      8.95 seconds
TestRunner: sco-tester        PASS      8.67 seconds
TestRunner: smp-tester        PASS      8.79 seconds
TestRunner: userchan-tester   PASS      5.78 seconds



---
Regards,
Linux Bluetooth
Pavel Skripkin July 17, 2022, 4:17 p.m. UTC | #2
Hi Khalid,

Khalid Masum <khalid.masum.92@gmail.com> says:
> Failure of kzalloc to allocate memory is not reported. Return Error
> pointer to ENOMEM if memory allocation fails. This will increase
> readability and will make the function easier to use in future.
> 
> Signed-off-by: Khalid Masum <khalid.masum.92@gmail.com>
> ---

[snip]

> index a0f99baafd35..ea50767e02bf 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -2419,7 +2419,7 @@ struct hci_dev *hci_alloc_dev_priv(int sizeof_priv)
>   
>   	hdev = kzalloc(alloc_size, GFP_KERNEL);
>   	if (!hdev)
> -		return NULL;
> +		return ERR_PTR(-ENOMEM);
>   

This will break all callers of hci_alloc_dev(). All callers expect NULL 
in case of an error, so you will leave them with wrong pointer.

Also, allocation functionS return an error only in case of ENOMEM, so 
initial code is fine, IMO




Thanks,
--Pavel Skripkin
Khalid Masum July 17, 2022, 6:34 p.m. UTC | #3
On Sun, Jul 17, 2022 at 10:17 PM Pavel Skripkin <paskripkin@gmail.com> wrote:
>
> Hi Khalid,
>
> Khalid Masum <khalid.masum.92@gmail.com> says:
> > Failure of kzalloc to allocate memory is not reported. Return Error
> > pointer to ENOMEM if memory allocation fails. This will increase
> > readability and will make the function easier to use in future.
> >
> > Signed-off-by: Khalid Masum <khalid.masum.92@gmail.com>
> > ---
>
> [snip]
>
> > index a0f99baafd35..ea50767e02bf 100644
> > --- a/net/bluetooth/hci_core.c
> > +++ b/net/bluetooth/hci_core.c
> > @@ -2419,7 +2419,7 @@ struct hci_dev *hci_alloc_dev_priv(int sizeof_priv)
> >
> >       hdev = kzalloc(alloc_size, GFP_KERNEL);
> >       if (!hdev)
> > -             return NULL;
> > +             return ERR_PTR(-ENOMEM);
> >
>
> This will break all callers of hci_alloc_dev(). All callers expect NULL
> in case of an error, so you will leave them with wrong pointer.

You are right. All callers of hci_alloc_dev() need to be able to handle
the error pointer. I shall send a V2 with all the callers of hci_alloc_dev
handling the ERR_PTR.

> Also, allocation functionS return an error only in case of ENOMEM, so
> initial code is fine, IMO
>

I think it makes the memory allocation error handling look to be a bit
different from what we usually do while allocating memory which is,
returning an error or an error pointer. Here we are returning a NULL
without any context, making it a bit unreadable. So I think returning
an error pointer is better. If I am not mistaken, this also complies with
the return convention:
https://www.kernel.org/doc/htmldocs/kernel-hacking/convention-returns.html

>
> Thanks,
> --Pavel Skripkin


Thanks,
  -- Khalid Masum
Luiz Augusto von Dentz July 18, 2022, 11:03 p.m. UTC | #4
Hi Khalid,

On Sun, Jul 17, 2022 at 11:34 AM Khalid Masum <khalid.masum.92@gmail.com> wrote:
>
> On Sun, Jul 17, 2022 at 10:17 PM Pavel Skripkin <paskripkin@gmail.com> wrote:
> >
> > Hi Khalid,
> >
> > Khalid Masum <khalid.masum.92@gmail.com> says:
> > > Failure of kzalloc to allocate memory is not reported. Return Error
> > > pointer to ENOMEM if memory allocation fails. This will increase
> > > readability and will make the function easier to use in future.
> > >
> > > Signed-off-by: Khalid Masum <khalid.masum.92@gmail.com>
> > > ---
> >
> > [snip]
> >
> > > index a0f99baafd35..ea50767e02bf 100644
> > > --- a/net/bluetooth/hci_core.c
> > > +++ b/net/bluetooth/hci_core.c
> > > @@ -2419,7 +2419,7 @@ struct hci_dev *hci_alloc_dev_priv(int sizeof_priv)
> > >
> > >       hdev = kzalloc(alloc_size, GFP_KERNEL);
> > >       if (!hdev)
> > > -             return NULL;
> > > +             return ERR_PTR(-ENOMEM);
> > >
> >
> > This will break all callers of hci_alloc_dev(). All callers expect NULL
> > in case of an error, so you will leave them with wrong pointer.
>
> You are right. All callers of hci_alloc_dev() need to be able to handle
> the error pointer. I shall send a V2 with all the callers of hci_alloc_dev
> handling the ERR_PTR.
>
> > Also, allocation functionS return an error only in case of ENOMEM, so
> > initial code is fine, IMO
> >

If there just a single error like ENOMEM then Id say this is fine,
just as it is fine for kzalloc.

> I think it makes the memory allocation error handling look to be a bit
> different from what we usually do while allocating memory which is,
> returning an error or an error pointer. Here we are returning a NULL
> without any context, making it a bit unreadable. So I think returning
> an error pointer is better. If I am not mistaken, this also complies with
> the return convention:
> https://www.kernel.org/doc/htmldocs/kernel-hacking/convention-returns.html

Not sure if that would apply to code that is basically a wrapper of kzalloc.

> >
> > Thanks,
> > --Pavel Skripkin
>
>
> Thanks,
>   -- Khalid Masum
Khalid Masum July 23, 2022, 10:54 a.m. UTC | #5
On Tue, Jul 19, 2022 at 5:04 AM Luiz Augusto von Dentz
<luiz.dentz@gmail.com> wrote:
>
> Hi Khalid,
>
> On Sun, Jul 17, 2022 at 11:34 AM Khalid Masum <khalid.masum.92@gmail.com> wrote:
> >
> > On Sun, Jul 17, 2022 at 10:17 PM Pavel Skripkin <paskripkin@gmail.com> wrote:
> > >
> > > Hi Khalid,
> > >
> > > Khalid Masum <khalid.masum.92@gmail.com> says:
> > > > Failure of kzalloc to allocate memory is not reported. Return Error
> > > > pointer to ENOMEM if memory allocation fails. This will increase
> > > > readability and will make the function easier to use in future.
> > > >
> > > > Signed-off-by: Khalid Masum <khalid.masum.92@gmail.com>
> > > > ---
> > >
> > > [snip]
> > >
> > > > index a0f99baafd35..ea50767e02bf 100644
> > > > --- a/net/bluetooth/hci_core.c
> > > > +++ b/net/bluetooth/hci_core.c
> > > > @@ -2419,7 +2419,7 @@ struct hci_dev *hci_alloc_dev_priv(int sizeof_priv)
> > > >
> > > >       hdev = kzalloc(alloc_size, GFP_KERNEL);
> > > >       if (!hdev)
> > > > -             return NULL;
> > > > +             return ERR_PTR(-ENOMEM);
> > > >
> > >
> > > This will break all callers of hci_alloc_dev(). All callers expect NULL
> > > in case of an error, so you will leave them with wrong pointer.
> >
> > You are right. All callers of hci_alloc_dev() need to be able to handle
> > the error pointer. I shall send a V2 with all the callers of hci_alloc_dev
> > handling the ERR_PTR.
> >
> > > Also, allocation functionS return an error only in case of ENOMEM, so
> > > initial code is fine, IMO
> > >
>
> If there just a single error like ENOMEM then Id say this is fine,
> just as it is fine for kzalloc.
>
> > I think it makes the memory allocation error handling look to be a bit
> > different from what we usually do while allocating memory which is,
> > returning an error or an error pointer. Here we are returning a NULL
> > without any context, making it a bit unreadable. So I think returning
> > an error pointer is better. If I am not mistaken, this also complies with
> > the return convention:
> > https://www.kernel.org/doc/htmldocs/kernel-hacking/convention-returns.html
>
> Not sure if that would apply to code that is basically a wrapper of kzalloc.

I got you.
> > > Thanks,
> > > --Pavel Skripkin
> >
> >
> > Thanks,
> >   -- Khalid Masum
>
>
>
> --
> Luiz Augusto von Dentz

Thanks,
  -- Khalid Masum
diff mbox series

Patch

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index e25fcd49db70..3407762b3b15 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -3692,8 +3692,8 @@  static int btusb_probe(struct usb_interface *intf,
 	data->recv_acl = hci_recv_frame;
 
 	hdev = hci_alloc_dev_priv(priv_size);
-	if (!hdev)
-		return -ENOMEM;
+	if (IS_ERR(hdev))
+		return PTR_ERR(hdev);
 
 	hdev->bus = HCI_USB;
 	hci_set_drvdata(hdev, data);
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index a0f99baafd35..ea50767e02bf 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -2419,7 +2419,7 @@  struct hci_dev *hci_alloc_dev_priv(int sizeof_priv)
 
 	hdev = kzalloc(alloc_size, GFP_KERNEL);
 	if (!hdev)
-		return NULL;
+		return ERR_PTR(-ENOMEM);
 
 	hdev->pkt_type  = (HCI_DM1 | HCI_DH1 | HCI_HV1);
 	hdev->esco_type = (ESCO_HV1);