udev: Add id program and rule for FIDO security tokens
Add a fido_id program meant to be run for devices in the hidraw subsystem via an IMPORT directive. The program parses the HID report descriptor and assigns the ID_SECURITY_TOKEN environment variable if a declared usage matches the FIDO_CTAPHID_USAGE declared in the FIDO CTAP specification. This replaces the previous approach of whitelisting all known security token models manually. This commit is accompanied by a test suite and a fuzzer target for the descriptor parsing routine. Fixes: #11996.
This commit is contained in:
committed by
Yu Watanabe
parent
1e19f5ac0d
commit
d45ee2f31a
@@ -0,0 +1,23 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||
|
||||
#include <linux/hid.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "fido_id/fido_id_desc.h"
|
||||
#include "fuzz.h"
|
||||
#include "log.h"
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
/* We don't want to fill the logs with messages about parse errors.
|
||||
* Disable most logging if not running standalone */
|
||||
if (!getenv("SYSTEMD_LOG_LEVEL"))
|
||||
log_set_max_level(LOG_CRIT);
|
||||
|
||||
if (size > HID_MAX_DESCRIPTOR_SIZE)
|
||||
return 0;
|
||||
(void) is_fido_security_token_desc(data, size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
"\xfe"
|
||||
"\x00"
|
||||
"\x01"
|
||||
"\xf1"
|
||||
"\xd0"
|
||||
"\xf1\xd0\x00\x01"
|
||||
@@ -146,4 +146,9 @@ fuzzers += [
|
||||
[['src/fuzz/fuzz-time-util.c'],
|
||||
[libshared],
|
||||
[]],
|
||||
|
||||
[['src/fuzz/fuzz-fido-id-desc.c',
|
||||
'src/udev/fido_id/fido_id_desc.c'],
|
||||
[],
|
||||
[]]
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user