/* * This header provides constants for pca9532 LED bindings. * * This file is licensed under the terms of the GNU General Public * License version 2. This program is licensed "as is" without any * warranty of any kind, whether express or implied. */ #ifndef _DT_BINDINGS_LEDS_PCA9532_H #define _DT_BINDINGS_LEDS_PCA9532_H #define PCA9532_TYPE_NONE 0 #define PCA9532_TYPE_LED 1 #define PCA9532_TYPE_N2100_BEEP 2 #define PCA9532_TYPE_GPIO 3 #define PCA9532_LED_TIMER2 4 #endif /* _DT_BINDINGS_LEDS_PCA9532_H */ iv id='cgit'>
summaryrefslogtreecommitdiff
path: root/include/net
ct name='context' onchange='this.form.submit();'>
ModeNameSize
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2016-10-24 13:59:15 +0200
committerLinus Walleij <linus.walleij@linaro.org>2016-10-31 21:23:44 +0100
commit953b956a2e6d35298e684f251bad98ea6c96f982 (patch)
treea18a8ab665392e1214ce1d5a7ef1cfd538c660e7 /include
parenta909d3e636995ba7c349e2ca5dbb528154d4ac30 (diff)
gpio: GPIO_GET_LINE{HANDLE,EVENT}_IOCTL: Fix file descriptor leak
When allocating a new line handle or event a file is allocated that it is associated to. The file is attached to a file descriptor of the current process and the file descriptor is returned to userspace using copy_to_user(). If this copy operation fails the line handle or event allocation is aborted, all acquired resources are freed and an error is returned. But the file struct is not freed and left attached to the userspace application and even though the file descriptor number was not copied it is trivial to guess. If a userspace application performs a IOCTL on such a left over file descriptor it will trigger a use-after-free and if the file descriptor is closed (latest when the application exits) a double-free is triggered. anon_inode_getfd() performs 3 tasks, allocate a file struct, allocate a file descriptor for the current process and install the file struct in the file descriptor. As soon as the file struct is installed in the file descriptor it is accessible by userspace (even if the IOCTL itself hasn't completed yet), this means uninstalling the fd on the error path is not an option, since userspace might already got a reference to the file. Instead anon_inode_getfd() needs to be broken into its individual steps. The allocation of the file struct and file descriptor is done first, then the copy_to_user() is executed and only if it succeeds the file is installed. Since the file struct is reference counted it can not be just freed, but its reference needs to be dropped, which will also call the release() callback, which will free the state attached to the file. So in this case the normal error cleanup path should not be taken. Cc: stable@vger.kernel.org Fixes: d932cd49182f ("gpio: free handles in fringe cases") Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'include')