diff mbox series

[v2] i2c: cp2615: handle allocation failure

Message ID 20260818111703.19604-1-triet.hoang.dev@gmail.com
State New
Headers show
Series [v2] i2c: cp2615: handle allocation failure | expand

Commit Message

Triet Hoang Aug. 18, 2026, 11:17 a.m. UTC
Check the result of kzalloc_obj() and return -ENOMEM
when the allocation fails instead of passing a NULL pointer
to the message initialization helpers, which would return -EINVAL.

Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
---
Changes in v2:
- Clarify the commit message to describe the actual behavior change.
- Fix coding style regression
---
 drivers/i2c/busses/i2c-cp2615.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Markus Elfring Aug. 19, 2026, 6:28 a.m. UTC | #1
> Check the result of kzalloc_obj() and return -ENOMEM
> when the allocation fails instead of passing a NULL pointer
> to the message initialization helpers, which would return -EINVAL.

* How do you think about to add any tags (like “Fixes” and “Cc”) accordingly?
  https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v7.2#n145
  https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/stable-kernel-rules.rst?h=v7.2#n34

* How do you think about to increase the application of scope-based resource management?


Regards,
Markus
Bence Csókás Aug. 28, 2026, 12:08 p.m. UTC | #2
Hi,

On 8/18/26 13:17, Triet Hoang wrote:
> Check the result of kzalloc_obj() and return -ENOMEM
> when the allocation fails instead of passing a NULL pointer
> to the message initialization helpers, which would return -EINVAL.
> 
> Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
Just change the -EINVAL to -ENOMEM. This is something which has been 
discussed before [1] as a potential to-do.

[1] 
https://lore.kernel.org/lkml/CACCVKEFXOKhXmF3rcmKQ8-aMFZJLZOf+imsuBYKAQsWptrJG6Q@mail.gmail.com/

On 8/19/26 08:28, Markus Elfring wrote:
 > * How do you think about to increase the application of scope-based 
resource management?

I second this, this old code could use some RAII modernization.

Bence
Andi Shyti Aug. 28, 2026, 5:09 p.m. UTC | #3
Hi Triet,

thank you for your patch.

On Tue, Aug 18, 2026 at 11:17:01AM +0000, Triet Hoang wrote:
> Check the result of kzalloc_obj() and return -ENOMEM
> when the allocation fails instead of passing a NULL pointer
> to the message initialization helpers, which would return -EINVAL.
> 
> Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
> ---
> Changes in v2:
> - Clarify the commit message to describe the actual behavior change.
> - Fix coding style regression

Next time please don't send your v2 as in reply to v1. It
confuses me.

> ---
>  drivers/i2c/busses/i2c-cp2615.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/i2c/busses/i2c-cp2615.c b/drivers/i2c/busses/i2c-cp2615.c
> index 951de6249834..c1275fcad636 100644
> --- a/drivers/i2c/busses/i2c-cp2615.c
> +++ b/drivers/i2c/busses/i2c-cp2615.c
> @@ -128,6 +128,9 @@ cp2615_i2c_send(struct usb_interface *usbif, struct cp2615_i2c_transfer *i2c_w)
>  	struct usb_device *usbdev = interface_to_usbdev(usbif);
>  	int res = cp2615_init_i2c_msg(msg, i2c_w);
>  
> +	if (!msg)
> +		return -ENOMEM;
> +

Your patch looks good, but, as you are at it, can I ask you here
a little effort? Personally I don't like and I find unreadable
the form:

	struct cp2615_iop_msg *msg = kzalloc_obj(*msg);
	...

	if (!msg)
		return -ENOMEM.

Important assignments, like kzalloc_*(), shouldn't be made during
declaration. I prefer the form:

	
	struct cp2615_iop_msg *msg;
	...

	msg = kzalloc_obj(*msg);
	if (!msg)
		return -ENOMEM.

Works for you? Do you mind updating in v3?

Thanks,
Andi

>  	if (!res)
>  		res = usb_bulk_msg(usbdev, usb_sndbulkpipe(usbdev, IOP_EP_OUT),
>  				   msg, ntohs(msg->length), NULL, 0);
Andi Shyti Aug. 28, 2026, 5:09 p.m. UTC | #4
On Fri, Aug 28, 2026 at 02:08:19PM +0200, Bence Csókás wrote:
> On 8/18/26 13:17, Triet Hoang wrote:
> > Check the result of kzalloc_obj() and return -ENOMEM
> > when the allocation fails instead of passing a NULL pointer
> > to the message initialization helpers, which would return -EINVAL.
> > 
> > Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
> Just change the -EINVAL to -ENOMEM. This is something which has been
> discussed before [1] as a potential to-do.
> 
> [1] https://lore.kernel.org/lkml/CACCVKEFXOKhXmF3rcmKQ8-aMFZJLZOf+imsuBYKAQsWptrJG6Q@mail.gmail.com/
> 
> On 8/19/26 08:28, Markus Elfring wrote:
> > * How do you think about to increase the application of scope-based
> resource management?
> 
> I second this, this old code could use some RAII modernization.

is there a managed version for kzalloc_obj()?

Andi
Bence Csókás Aug. 28, 2026, 8:12 p.m. UTC | #5
Hi,

On 8/28/26 19:09, Andi Shyti wrote:
> On Fri, Aug 28, 2026 at 02:08:19PM +0200, Bence Csókás wrote:
>> On 8/19/26 08:28, Markus Elfring wrote:
>>> * How do you think about to increase the application of scope-based
>> resource management?
>>
>> I second this, this old code could use some RAII modernization.
> 
> is there a managed version for kzalloc_obj()?
Well I'm thinking, since msg's lifetime is only within the functions, it 
can be attributed with `__free(kfree)`.

Anyways, in the curent state of this patch, I'm afraid I must NAK it.

Bence
Christophe JAILLET Aug. 28, 2026, 8:40 p.m. UTC | #6
Le 28/08/2026 à 19:09, Andi Shyti a écrit :
> Hi Triet,
> 
> thank you for your patch.
> 
> On Tue, Aug 18, 2026 at 11:17:01AM +0000, Triet Hoang wrote:
>> Check the result of kzalloc_obj() and return -ENOMEM
>> when the allocation fails instead of passing a NULL pointer
>> to the message initialization helpers, which would return -EINVAL.
>>
>> Signed-off-by: Triet Hoang <triet.hoang.dev@gmail.com>
>> ---
>> Changes in v2:
>> - Clarify the commit message to describe the actual behavior change.
>> - Fix coding style regression
> 
> Next time please don't send your v2 as in reply to v1. It
> confuses me.
> 
>> ---
>>   drivers/i2c/busses/i2c-cp2615.c | 6 ++++++
>>   1 file changed, 6 insertions(+)
>>
>> diff --git a/drivers/i2c/busses/i2c-cp2615.c b/drivers/i2c/busses/i2c-cp2615.c
>> index 951de6249834..c1275fcad636 100644
>> --- a/drivers/i2c/busses/i2c-cp2615.c
>> +++ b/drivers/i2c/busses/i2c-cp2615.c
>> @@ -128,6 +128,9 @@ cp2615_i2c_send(struct usb_interface *usbif, struct cp2615_i2c_transfer *i2c_w)
>>   	struct usb_device *usbdev = interface_to_usbdev(usbif);
>>   	int res = cp2615_init_i2c_msg(msg, i2c_w);
>>   
>> +	if (!msg)
>> +		return -ENOMEM;
>> +
> 
> Your patch looks good, but, as you are at it, can I ask you here

Yes, the patch looks good (and the proposal below even better), but is 
not a must have.

In both cases, the error handling ends being done at [1].

This is not obvious at all when reading the code, but looks safe.

Just my 2c.

CJ


[1]: 
https://elixir.bootlin.com/linux/v7.2/source/drivers/i2c/busses/i2c-cp2615.c#L85


> a little effort? Personally I don't like and I find unreadable
> the form:
> 
> 	struct cp2615_iop_msg *msg = kzalloc_obj(*msg);
> 	...
> 
> 	if (!msg)
> 		return -ENOMEM.
> 
> Important assignments, like kzalloc_*(), shouldn't be made during
> declaration. I prefer the form:
> 
> 	
> 	struct cp2615_iop_msg *msg;
> 	...
> 
> 	msg = kzalloc_obj(*msg);
> 	if (!msg)
> 		return -ENOMEM.
> 
> Works for you? Do you mind updating in v3?
> 
> Thanks,
> Andi
> 
>>   	if (!res)
>>   		res = usb_bulk_msg(usbdev, usb_sndbulkpipe(usbdev, IOP_EP_OUT),
>>   				   msg, ntohs(msg->length), NULL, 0);
> 
>
Triet Hoang Aug. 29, 2026, 3:42 a.m. UTC | #7
On Fri, 28 Aug 2026 19:09:03 +0200 Andi Shyti wrote:

> Next time please don't send your v2 as in reply to v1. It
> confuses me.

Sorry about that. Will keep it in my mind!

> Your patch looks good, but, as you are at it, can I ask you here
> a little effort? Personally I don't like and I find unreadable
> the form:
> 
> 	struct cp2615_iop_msg *msg = kzalloc_obj(*msg);
> 	...
> 
> 	if (!msg)
> 		return -ENOMEM.
> 
> Important assignments, like kzalloc_*(), shouldn't be made during
> declaration. I prefer the form:
> 
> 	
> 	struct cp2615_iop_msg *msg;
> 	...
> 
> 	msg = kzalloc_obj(*msg);
> 	if (!msg)
> 		return -ENOMEM.
> 
> Works for you? Do you mind updating in v3?

Sure, no problem. I will update and send the v3.
Thanks for your reviewing and suggestion!

Regards,
Triet
diff mbox series

Patch

diff --git a/drivers/i2c/busses/i2c-cp2615.c b/drivers/i2c/busses/i2c-cp2615.c
index 951de6249834..c1275fcad636 100644
--- a/drivers/i2c/busses/i2c-cp2615.c
+++ b/drivers/i2c/busses/i2c-cp2615.c
@@ -128,6 +128,9 @@  cp2615_i2c_send(struct usb_interface *usbif, struct cp2615_i2c_transfer *i2c_w)
 	struct usb_device *usbdev = interface_to_usbdev(usbif);
 	int res = cp2615_init_i2c_msg(msg, i2c_w);
 
+	if (!msg)
+		return -ENOMEM;
+
 	if (!res)
 		res = usb_bulk_msg(usbdev, usb_sndbulkpipe(usbdev, IOP_EP_OUT),
 				   msg, ntohs(msg->length), NULL, 0);
@@ -176,6 +179,9 @@  static int cp2615_check_iop(struct usb_interface *usbif)
 	struct usb_device *usbdev = interface_to_usbdev(usbif);
 	int res = cp2615_init_iop_msg(msg, iop_GetAccessoryInfo, NULL, 0);
 
+	if (!msg)
+		return -ENOMEM;
+
 	if (res)
 		goto out;