Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1236056 > unrolled thread

[PATCH] HID: hiddev: fix returned errno code in hiddev_connect()

Started byLuis de Bethencourt <luisbg@osg.samsung.com>
First post2015-09-30 12:30 +0200
Last post2015-10-06 11:00 +0200
Articles 5 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] HID: hiddev: fix returned errno code in hiddev_connect() Luis de Bethencourt <luisbg@osg.samsung.com> - 2015-09-30 12:30 +0200
    Re: [PATCH] HID: hiddev: fix returned errno code in  hiddev_connect() Jiri Kosina <jikos@kernel.org> - 2015-09-30 21:50 +0200
      Re: [PATCH] HID: hiddev: fix returned errno code in hiddev_connect() Luis de Bethencourt <luisbg@osg.samsung.com> - 2015-10-03 23:40 +0200
        Re: [PATCH] HID: hiddev: fix returned errno code in  hiddev_connect() Jiri Kosina <jikos@kernel.org> - 2015-10-05 16:30 +0200
          Re: [PATCH] HID: hiddev: fix returned errno code in hiddev_connect() Luis de Bethencourt <luisbg@osg.samsung.com> - 2015-10-06 11:00 +0200

#1236056 — [PATCH] HID: hiddev: fix returned errno code in hiddev_connect()

FromLuis de Bethencourt <luisbg@osg.samsung.com>
Date2015-09-30 12:30 +0200
Subject[PATCH] HID: hiddev: fix returned errno code in hiddev_connect()
Message-ID<qeml7-1mP-39@gated-at.bofh.it>
The driver is using -1 instead of the -ENOMEM defined macro to specify
that a buffer allocation failed. Since the error number is propagated,
the caller will get a -EPERM which is the wrong error condition.

Also, the smatch tool complains with the following warning:
hiddev_connect() warn: returning -1 instead of -ENOMEM is sloppy

Signed-off-by: Luis de Bethencourt <luisbg@osg.samsung.com>
---
 drivers/hid/usbhid/hiddev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c
index 2f1ddca..c5290ff 100644
--- a/drivers/hid/usbhid/hiddev.c
+++ b/drivers/hid/usbhid/hiddev.c
@@ -894,7 +894,7 @@ int hiddev_connect(struct hid_device *hid, unsigned int force)
 	}
 
 	if (!(hiddev = kzalloc(sizeof(struct hiddev), GFP_KERNEL)))
-		return -1;
+		return -ENOMEM;
 
 	init_waitqueue_head(&hiddev->wait);
 	INIT_LIST_HEAD(&hiddev->list);
-- 
2.5.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1236708 — Re: [PATCH] HID: hiddev: fix returned errno code in hiddev_connect()

FromJiri Kosina <jikos@kernel.org>
Date2015-09-30 21:50 +0200
SubjectRe: [PATCH] HID: hiddev: fix returned errno code in hiddev_connect()
Message-ID<qevy1-6hR-5@gated-at.bofh.it>
In reply to#1236056
On Wed, 30 Sep 2015, Luis de Bethencourt wrote:

> The driver is using -1 instead of the -ENOMEM defined macro to specify
> that a buffer allocation failed. Since the error number is propagated,
> the caller will get a -EPERM which is the wrong error condition.

Generally I agree that the more specific errno, the better.

But I am not really sure where you are seeing the bug (mapping to -EPERM) 
in this case? I think the only caller of hiddev_connect() should be 
hid_connect(), and the only thing that guy cares about whether individual 
callbacks succeed or fail, so that it sets hdev->clamed flags accordingly.

Could you please be more specific about the -EPERM mapping you are talking 
about?

Thanks,

-- 
Jiri Kosina
SUSE Labs

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1239006

FromLuis de Bethencourt <luisbg@osg.samsung.com>
Date2015-10-03 23:40 +0200
Message-ID<qfCH8-5Dz-9@gated-at.bofh.it>
In reply to#1236708
On 30/09/15 20:40, Jiri Kosina wrote:
> On Wed, 30 Sep 2015, Luis de Bethencourt wrote:
> 
>> The driver is using -1 instead of the -ENOMEM defined macro to specify
>> that a buffer allocation failed. Since the error number is propagated,
>> the caller will get a -EPERM which is the wrong error condition.
> 
> Generally I agree that the more specific errno, the better.
> 
> But I am not really sure where you are seeing the bug (mapping to -EPERM) 
> in this case? I think the only caller of hiddev_connect() should be 
> hid_connect(), and the only thing that guy cares about whether individual 
> callbacks succeed or fail, so that it sets hdev->clamed flags accordingly.
> 
> Could you please be more specific about the -EPERM mapping you are talking 
> about?
> 
> Thanks,
> 

I agree with you. The only caller of hiddev_connect() only checks if the
callback succeded. It checks if the return < 0.
What I meant is that -1 means -EPERM. [0]

This patch is purely about the correctness of using -ENOMEM. The word
"propagated" was not the best way to describe this problem. I could edit
the commit message if you would like.

Thanks for the review,
Luis

[0] http://lxr.free-electrons.com/source/include/uapi/asm-generic/errno-base.h#L15
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1239592 — Re: [PATCH] HID: hiddev: fix returned errno code in hiddev_connect()

FromJiri Kosina <jikos@kernel.org>
Date2015-10-05 16:30 +0200
SubjectRe: [PATCH] HID: hiddev: fix returned errno code in hiddev_connect()
Message-ID<qgeW5-1th-5@gated-at.bofh.it>
In reply to#1239006
On Sat, 3 Oct 2015, Luis de Bethencourt wrote:

> > But I am not really sure where you are seeing the bug (mapping to 
> > -EPERM) in this case? I think the only caller of hiddev_connect() 
> > should be hid_connect(), and the only thing that guy cares about 
> > whether individual callbacks succeed or fail, so that it sets 
> > hdev->clamed flags accordingly.
> > 
> > Could you please be more specific about the -EPERM mapping you are 
> > talking about?
> > 
> I agree with you. The only caller of hiddev_connect() only checks if the
> callback succeded. It checks if the return < 0.
> What I meant is that -1 means -EPERM. [0]

I still don't understand what problem you are chasing here, sorry. EPERM 
is defined to be 1, yes. So are many other completely unrelated #defines.

> This patch is purely about the correctness of using -ENOMEM. The word 
> "propagated" was not the best way to describe this problem. I could edit 
> the commit message if you would like.

You seem to imply that someone might be interpreting that -1 as a define 
from errno.h. But that's not the case.

Are you going to look at every 'return -1' occurence in the kernel and 
convert it to something else? That can keep you busy for quite some time:

	$ git grep 'return -1' | wc -l
	9167

The only cleanup I'd imagine at least remotely possible in this case would 
be to convert the ->connect() callbacks return bool.

-- 
Jiri Kosina
SUSE Labs

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1240274

FromLuis de Bethencourt <luisbg@osg.samsung.com>
Date2015-10-06 11:00 +0200
Message-ID<qgwgi-1eJ-15@gated-at.bofh.it>
In reply to#1239592
On 05/10/15 15:24, Jiri Kosina wrote:
> On Sat, 3 Oct 2015, Luis de Bethencourt wrote:
> 
>>> But I am not really sure where you are seeing the bug (mapping to 
>>> -EPERM) in this case? I think the only caller of hiddev_connect() 
>>> should be hid_connect(), and the only thing that guy cares about 
>>> whether individual callbacks succeed or fail, so that it sets 
>>> hdev->clamed flags accordingly.
>>>
>>> Could you please be more specific about the -EPERM mapping you are 
>>> talking about?
>>>
>> I agree with you. The only caller of hiddev_connect() only checks if the
>> callback succeded. It checks if the return < 0.
>> What I meant is that -1 means -EPERM. [0]
> 
> I still don't understand what problem you are chasing here, sorry. EPERM 
> is defined to be 1, yes. So are many other completely unrelated #defines.
> 
>> This patch is purely about the correctness of using -ENOMEM. The word 
>> "propagated" was not the best way to describe this problem. I could edit 
>> the commit message if you would like.
> 
> You seem to imply that someone might be interpreting that -1 as a define 
> from errno.h. But that's not the case.
> 
> Are you going to look at every 'return -1' occurence in the kernel and 
> convert it to something else? That can keep you busy for quite some time:
> 
> 	$ git grep 'return -1' | wc -l
> 	9167
> 
> The only cleanup I'd imagine at least remotely possible in this case would 
> be to convert the ->connect() callbacks return bool.
> 

This is a very good point. I will write a second version of the patch that
converts the return to a boolean.

Thanks for the review,
Luis
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web