Find a file
Peter Hutterer a423d7d326 evdev: strip the device name of format directives
This fixes a format string vulnerabilty.

evdev_log_message() composes a format string consisting of a fixed
prefix (including the rendered device name) and the passed-in format
buffer. This format string is then passed with the arguments to the
actual log handler, which usually and eventually ends up being printf.

If the device name contains a printf-style format directive, these ended
up in the format string and thus get interpreted correctly, e.g. for a
device "Foo%sBar" the log message vs printf invocation ends up being:
  evdev_log_message(device, "some message %s", "some argument");
  printf("event9 - Foo%sBar: some message %s", "some argument");

This can enable an attacker to execute malicious code with the
privileges of the process using libinput.

To exploit this, an attacker needs to be able to create a kernel device
with a malicious name, e.g. through /dev/uinput or a Bluetooth device.

To fix this, convert any potential format directives in the device name
by duplicating percentages.

Pre-rendering the device to avoid the issue altogether would be nicer
but the current log level hooks do not easily allow for this. The device
name is the only user-controlled part of the format string.

A second potential issue is the sysname of the device which is also
sanitized.

This issue was found by Albin Eldstål-Ahrens and Benjamin Svensson from
Assured AB, and independently by Lukas Lamster.

Fixes #752

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2022-04-20 13:32:31 +10:00
.gitlab/issue_templates gitlab issue templates: remove the checkmarks 2020-03-22 22:33:01 +00:00
.gitlab-ci gitlab CI: fail the sanity check stage if the fork is not public 2022-02-24 10:21:53 +10:00
completion/zsh touchpad: new option dwtp (disable-while-trackpointing) 2022-03-08 01:33:40 +00:00
doc doc/user: add a page to troubleshoot right-click Clickpads 2022-03-28 23:25:26 +00:00
include Update valgrind.h to a newer version 2022-04-05 17:22:42 -07:00
quirks quirks: add lenovo legion slim 7 2022-02-15 20:02:38 +01:00
src evdev: strip the device name of format directives 2022-04-20 13:32:31 +10:00
test evdev: strip the device name of format directives 2022-04-20 13:32:31 +10:00
tools tools/record: fix the indentation of the system: section 2022-04-07 14:46:57 +10:00
udev util: auto-declare the element variable in ARRAY_FOR_EACH 2022-03-09 10:16:07 +10:00
.dir-locals.el indentation: add .dir-locals.el for emacs 2018-02-26 18:44:00 +10:00
.editorconfig editorconfig: add settings for meson files 2021-08-04 05:58:29 +00:00
.gitignore gitignore: ignore gnuplot files 2018-05-10 16:25:40 +10:00
.gitlab-ci.yml gitlab CI: fail the sanity check stage if the fork is not public 2022-02-24 10:21:53 +10:00
.vimdir Add .vimdir for libinput-specific settings 2015-05-25 09:17:29 +10:00
CODING_STYLE.md coding style: allow C99 variable declaration 2022-03-02 11:01:14 +00:00
COPYING Change various references to the master branch to main 2021-04-29 01:31:03 +00:00
meson.build evdev: strip the device name of format directives 2022-04-20 13:32:31 +10:00
meson_options.txt meson.build: disable documentation by default 2021-08-03 12:11:09 +10:00
README.md Change various references to the master branch to main 2021-04-29 01:31:03 +00:00

libinput

libinput is a library that provides a full input stack for display servers and other applications that need to handle input devices provided by the kernel.

libinput provides device detection, event handling and abstraction to minimize the amount of custom input code the user of libinput needs to provide the common set of functionality that users expect. Input event processing includes scaling touch coordinates, generating relative pointer events from touchpads, pointer acceleration, etc.

User documentation

Documentation explaining features available in libinput is available here.

This includes the FAQ and the instructions on reporting bugs.

Source code

The source code of libinput can be found at: https://gitlab.freedesktop.org/libinput/libinput

For a list of current and past releases visit: https://www.freedesktop.org/wiki/Software/libinput/

Build instructions: https://wayland.freedesktop.org/libinput/doc/latest/building.html

Reporting Bugs

Bugs can be filed on freedesktop.org GitLab: https://gitlab.freedesktop.org/libinput/libinput/issues/

Where possible, please provide the libinput record output of the input device and/or the event sequence in question.

See https://wayland.freedesktop.org/libinput/doc/latest/reporting-bugs.html for more info.

Documentation

Examples of how to use libinput are the debugging tools in the libinput repository. Developers are encouraged to look at those tools for a real-world (yet simple) example on how to use libinput.

License

libinput is licensed under the MIT license.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: [...]

See the COPYING file for the full license information.

About

Documentation generated from git commit GIT_VERSION