Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Panic at expect "udev strings should always be utf8" #166

Open
hulthe opened this issue Jan 9, 2025 · 6 comments
Open

Panic at expect "udev strings should always be utf8" #166

hulthe opened this issue Jan 9, 2025 · 6 comments

Comments

@hulthe
Copy link

hulthe commented Jan 9, 2025

Hello! I'm not completely sure, but seems I have some strange device plugged in that breaks the assumption that udev strings must be utf8. I'm using probe-rs, which becomes unusable because of this.

Here's the backtrace:

thread 'main' panicked at /home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hidapi-2.6.3/src/linux_native.rs:386:19:
udev strings should always be utf8
stack backtrace:
   0: rust_begin_unwind
   1: core::panicking::panic_fmt
   2: hidapi::linux_native::device_to_hid_device_info
   3: <core::iter::adapters::filter::Filter<I,P> as core::iter::traits::iterator::Iterator>::next
   4: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter
   5: hidapi::linux_native::HidApiBackend::get_hid_device_info_vector
   6: hidapi::HidApi::add_devices
   7: hidapi::HidApi::new
   ...

Can provide more details if needed :)

@ruabmbua
Copy link
Owner

ruabmbua commented Jan 9, 2025

RUST_BACKTRACE=full with debug instead of release build could be useful.

@ruabmbua
Copy link
Owner

ruabmbua commented Jan 9, 2025

Also if you can, maybe include some debug printed output of the value that fails to convert / some info about the specific hid device, which makes it fail.

@hulthe
Copy link
Author

hulthe commented Jan 10, 2025

I found the culprit! It wasn't a physical device, it was a virtual UHID device. I turned of the service that was adding it and probe-rs works now. As for the value that fails to convert, it appears to just be random bytes that change every time I restart the UHID service. One dbg!-printed example: "\xD64%\xB9\u{4}\u{1c}\xA4\xFD"

Here's the full backtrace in case you need it:

Backtrace
thread 'main' panicked at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hidapi-2.6.3/src/linux_native.rs:386:19:
udev strings should always be utf8
stack backtrace:
   0:     0x5dad1f5686ca - std::backtrace_rs::backtrace::libunwind::trace::hfe0e1def394da018
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
   1:     0x5dad1f5686ca - std::backtrace_rs::backtrace::trace_unsynchronized::h96fbb6d117554616
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x5dad1f5686ca - std::sys::backtrace::_print_fmt::he1169c6f8956325b
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/sys/backtrace.rs:66:9
   3:     0x5dad1f5686ca - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::ha4a311b32f6b4ad8
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/sys/backtrace.rs:39:26
   4:     0x5dad1f596213 - core::fmt::rt::Argument::fmt::h8ccd2627d2418ed3
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/core/src/fmt/rt.rs:177:76
   5:     0x5dad1f596213 - core::fmt::write::h1866771663f62b81
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/core/src/fmt/mod.rs:1189:21
   6:     0x5dad1f563623 - std::io::Write::write_fmt::hb549e7444823135e
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/io/mod.rs:1884:15
   7:     0x5dad1f568512 - std::sys::backtrace::BacktraceLock::print::hddd3a9918ce29aa7
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/sys/backtrace.rs:42:9
   8:     0x5dad1f56999d - std::panicking::default_hook::{{closure}}::h791f75256b902d7d
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panicking.rs:268:22
   9:     0x5dad1f5697e3 - std::panicking::default_hook::h82cc572fcb0d8cd7
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panicking.rs:295:9
  10:     0x5dad1f569f77 - std::panicking::rust_panic_with_hook::he21644cc2707f2c4
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panicking.rs:801:13
  11:     0x5dad1f569dd6 - std::panicking::begin_panic_handler::{{closure}}::h42f7c414fed3cad9
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panicking.rs:667:13
  12:     0x5dad1f568ba9 - std::sys::backtrace::__rust_end_short_backtrace::ha26cf5766b4e8c65
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/sys/backtrace.rs:170:18
  13:     0x5dad1f569a9c - rust_begin_unwind
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panicking.rs:665:5
  14:     0x5dad1d45b350 - core::panicking::panic_fmt::h74866b78e934b1c0
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/core/src/panicking.rs:76:14
  15:     0x5dad1efcfc83 - hidapi::linux_native::osstring_to_string::h1618c35f0005da05
                               at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hidapi-2.6.3/src/linux_native.rs:386:19
  16:     0x5dad1efcd6f4 - hidapi::linux_native::device_to_hid_device_info::ha00d8c4a750250ca
                               at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hidapi-2.6.3/src/linux_native.rs:119:24
  17:     0x5dad1efcce75 - hidapi::linux_native::HidApiBackend::get_hid_device_info_vector::{{closure}}::h65a6bc96c84d99c3
                               at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hidapi-2.6.3/src/linux_native.rs:50:34
  18:     0x5dad1efd758c - core::iter::adapters::filter_map::filter_map_try_fold::{{closure}}::h0b69e243a1a19d53
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/filter_map.rs:49:28
  19:     0x5dad1efdb389 - core::iter::traits::iterator::Iterator::try_fold::h25f2854a9ed793f5
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs:2370:21
  20:     0x5dad1efd5e80 - <core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::try_fold::h34470d33fd9373a9
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/filter_map.rs:140:9
  21:     0x5dad1efc8f12 - <core::iter::adapters::fuse::Fuse<I> as core::iter::adapters::fuse::FuseImpl<I>>::try_fold::h9d0e5c3020a46397
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/fuse.rs:295:19
  22:     0x5dad1efd7847 - <core::iter::adapters::fuse::Fuse<I> as core::iter::traits::iterator::Iterator>::try_fold::h6e5ca6b1c8d29995
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/fuse.rs:89:9
  23:     0x5dad1efd7847 - core::iter::adapters::flatten::FlattenCompat<I,U>::iter_try_fold::h81d08519868a7bc0
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/flatten.rs:513:25
  24:     0x5dad1efd5f00 - <core::iter::adapters::flatten::FlattenCompat<I,U> as core::iter::traits::iterator::Iterator>::try_fold::h6d656d6595027bf6
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/flatten.rs:651:9
  25:     0x5dad1efd5e00 - <core::iter::adapters::flatten::Flatten<I> as core::iter::traits::iterator::Iterator>::try_fold::h846d79053143669a
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/flatten.rs:311:9
  26:     0x5dad1efc90aa - <core::iter::adapters::filter::Filter<I,P> as core::iter::traits::iterator::Iterator>::try_fold::h1af0f66f35862634
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/filter.rs:151:9
  27:     0x5dad1efca6ac - core::iter::traits::iterator::Iterator::find::hcdd5f8033eff7473
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs:2833:9
  28:     0x5dad1efc904e - <core::iter::adapters::filter::Filter<I,P> as core::iter::traits::iterator::Iterator>::next::h7003729dda3d7390
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/adapters/filter.rs:98:9
  29:     0x5dad1efd47ed - alloc::vec::Vec<T,A>::extend_desugared::h297c857c68a14e7e
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs:3520:35
  30:     0x5dad1efd58db - <alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend::h7d63e00c98aac4e4
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/vec/spec_extend.rs:19:9
  31:     0x5dad1efd2ae3 - <alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter::h1fd7b345b7560012
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/vec/spec_from_iter_nested.rs:42:9
  32:     0x5dad1efd58ee - <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter::h2c9fa743efa5f142
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/vec/spec_from_iter.rs:34:9
  33:     0x5dad1efd58c1 - <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter::he22775e5313dd4c0
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc/src/vec/mod.rs:3412:9
  34:     0x5dad1efca7b5 - core::iter::traits::iterator::Iterator::collect::h5c07609eee979086
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/iter/traits/iterator.rs:1971:9
  35:     0x5dad1efccccb - hidapi::linux_native::HidApiBackend::get_hid_device_info_vector::h06e3c4e09177dd41
                               at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hidapi-2.6.3/src/linux_native.rs:49:23
  36:     0x5dad1efdcfc4 - hidapi::HidApi::add_devices::hb1cd294fbd51eb5a
                               at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hidapi-2.6.3/src/lib.rs:240:26
  37:     0x5dad1efdce0b - hidapi::HidApi::new::hf625fccfbbe336a4
                               at /home/user/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hidapi-2.6.3/src/lib.rs:201:9
  38:     0x5dad1e9b01e7 - probe_rs::probe::cmsisdap::tools::list_cmsisdap_devices::he27a962bb80b362f
                               at /home/user/code/probe-rs/probe-rs/src/probe/cmsisdap/tools.rs:37:22
  39:     0x5dad1e9b1de6 - <probe_rs::probe::cmsisdap::CmsisDapFactory as probe_rs::probe::ProbeFactory>::list_probes::h3890589f3460f4fe
                               at /home/user/code/probe-rs/probe-rs/src/probe/cmsisdap/mod.rs:78:9
  40:     0x5dad1e8eb079 - probe_rs::probe::list::AllProbesLister::list_all::h4cc78e4f69994312
                               at /home/user/code/probe-rs/probe-rs/src/probe/list.rs:112:25
  41:     0x5dad1e8eaf66 - <probe_rs::probe::list::AllProbesLister as probe_rs::probe::list::ProbeLister>::list_all::h3a04f2893a280dbc
                               at /home/user/code/probe-rs/probe-rs/src/probe/list.rs:66:9
  42:     0x5dad1e8eaefe - probe_rs::probe::list::Lister::list_all::h2feca3062a2c0c33
                               at /home/user/code/probe-rs/probe-rs/src/probe/list.rs:35:9
  43:     0x5dad1d6fc6e5 - probe_rs::cmd::list::Cmd::run::hb1503f5a9c63ee01
                               at /home/user/code/probe-rs/probe-rs-tools/src/bin/probe-rs/cmd/list.rs:8:22
  44:     0x5dad1d52ce72 - probe_rs::main::h38527db5cc0cb110
                               at /home/user/code/probe-rs/probe-rs-tools/src/bin/probe-rs/main.rs:316:34
  45:     0x5dad1d7f19bb - core::ops::function::FnOnce::call_once::hd1480c5d093717c8
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
  46:     0x5dad1d5eff1d - std::sys::backtrace::__rust_begin_short_backtrace::h88a61cb0de575f3d
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/backtrace.rs:154:18
  47:     0x5dad1d567371 - std::rt::lang_start::{{closure}}::h584ff692418768e1
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:195:18
  48:     0x5dad1f558a57 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h39b9ecdfe07c1b40
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/core/src/ops/function.rs:284:13
  49:     0x5dad1f558a57 - std::panicking::try::do_call::h195dec19c0e8d555
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panicking.rs:557:40
  50:     0x5dad1f558a57 - std::panicking::try::h140b43e48373b310
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panicking.rs:520:19
  51:     0x5dad1f558a57 - std::panic::catch_unwind::h82ff8b15455474e8
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panic.rs:358:14
  52:     0x5dad1f558a57 - std::rt::lang_start_internal::{{closure}}::h68d9606a782b08fd
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/rt.rs:174:48
  53:     0x5dad1f558a57 - std::panicking::try::do_call::h9b1efbc7212cd607
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panicking.rs:557:40
  54:     0x5dad1f558a57 - std::panicking::try::h3c3a9bacfbed2ee5
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panicking.rs:520:19
  55:     0x5dad1f558a57 - std::panic::catch_unwind::h92cc37461d0f445d
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/panic.rs:358:14
  56:     0x5dad1f558a57 - std::rt::lang_start_internal::h78dd36c15a6b42b8
                               at /rustc/9fc6b43126469e3858e2fe86cafb4f0fd5068869/library/std/src/rt.rs:174:20
  57:     0x5dad1d56734a - std::rt::lang_start::h871d8b31a66ccc25
                               at /home/user/.rustup/toolchains/1.84.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/rt.rs:194:17
  58:     0x5dad1d535f5e - main
  59:     0x7927fca86e08 - <unknown>
  60:     0x7927fca86ecc - __libc_start_main
  61:     0x5dad1d45bd15 - _start
  62:                0x0 - <unknown>

Thanks for taking the time. Have a nice weekend!

@ruabmbua
Copy link
Owner

Can you provide me with the details on the uhid service? If possible I‘d like to try reproduce the issue myself and see if it’s a bug in our code. Random bytes could be a read from uninit memory.

@hulthe
Copy link
Author

hulthe commented Jan 10, 2025

Sure, it's this one: https://github.com/tillitis/tkey-fido

Should be enough to build and run it.

@stfrick
Copy link

stfrick commented Feb 5, 2025

Can confirm. The same happens with tpm-fido (https://github.com/psanford/tpm-fido)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants