Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Factory:LegacyX86
thunderbolt-utils
pull-5.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pull-5.patch of Package thunderbolt-utils
From e7c51d2dde402d4bc9ce23ec51e845c9a833439e Mon Sep 17 00:00:00 2001 From: Jan Engelhardt <jengelh@inai.de> Date: Wed, 19 Jul 2023 10:01:57 +0200 Subject: [PATCH] lstbt: fix crash when {sysfs}/vendor etc. is absent With Linux 6.3.9, I observed: ``` cat: /sys/bus/thunderbolt/devices/0-0/vendor: No such file or directory cat: /sys/bus/thunderbolt/devices/0-0/device: No such file or directory Segmentation fault (core dumped) ``` --- lib/helpers.c | 13 ++++++++----- lib/helpers.h | 5 +++++ lib/lstbt.c | 9 +++++---- lib/lstbt_r.c | 18 +++++++++++------- lib/lstbt_v.c | 9 +++++---- 5 files changed, 34 insertions(+), 20 deletions(-) diff --git a/lib/helpers.c b/lib/helpers.c index f1f7247..bf4fc75 100644 --- a/lib/helpers.c +++ b/lib/helpers.c @@ -652,11 +652,14 @@ void dump_vdid(const char *router) snprintf(did_path, sizeof(did_path), "cat %s%s/device", tbt_sysfs_path, router); did = do_bash_cmd(did_path); - - printf("ID %04x:%04x ", strtouh(vid), strtouh(did)); - - free(vid); - free(did); + if (vid != NULL && did != NULL) + printf("ID %04x:%04x ", strtouh(vid), strtouh(did)); + else + printf("ID -- "); + if (vid != NULL) + free(vid); + if (did != NULL) + free(did); } /* Dump the generation of the router */ diff --git a/lib/helpers.h b/lib/helpers.h index a3af187..b0081f1 100644 --- a/lib/helpers.h +++ b/lib/helpers.h @@ -76,3 +76,8 @@ int __main(char *domain, char *depth, char *device, bool retimer, bool tree, u8 verbose); char** ameliorate_args(int argc, char **argv); bool is_input_printable(int argc, char **argv); + +static inline const char *znul(const char *s) +{ + return s != NULL ? s : ""; +} diff --git a/lib/lstbt.c b/lib/lstbt.c index 8575efe..a070d47 100644 --- a/lib/lstbt.c +++ b/lib/lstbt.c @@ -40,10 +40,11 @@ static void dump_name(const char *router) snprintf(d_path, sizeof(d_path), "cat %s%s/device_name", tbt_sysfs_path, router); device = do_bash_cmd(d_path); - printf("%s %s ", vendor, device); - - free(vendor); - free(device); + printf("%s %s ", znul(vendor), znul(device)); + if (vendor != NULL) + free(vendor); + if (device != NULL) + free(device); } static bool dump_router(const char *router) diff --git a/lib/lstbt_r.c b/lib/lstbt_r.c index 5304bb1..242b554 100644 --- a/lib/lstbt_r.c +++ b/lib/lstbt_r.c @@ -78,9 +78,9 @@ static void dump_retimer_nvm_version(const char *retimer) retimer); ver = do_bash_cmd(path); - printf("NVM %s\n", ver); - - free(ver); + printf("NVM %s\n", znul(ver)); + if (ver != NULL) + free(ver); } /* Dumps the retimer */ @@ -124,12 +124,16 @@ static bool dump_retimer(const char *retimer) snprintf(did_path, sizeof(did_path), "cat %s%s/device", tbt_sysfs_path, retimer); did = do_bash_cmd(did_path); - printf("ID %04x:%04x ", strtouh(vid), strtouh(did)); + if (vid != NULL && did != NULL) + printf("ID %04x:%04x ", strtouh(vid), strtouh(did)); + else + printf("-- "); dump_retimer_nvm_version(retimer); - - free(vid); - free(did); + if (vid != NULL) + free(vid); + if (did != NULL) + free(did); free(router); return true; diff --git a/lib/lstbt_v.c b/lib/lstbt_v.c index 0b73169..8edc43a 100644 --- a/lib/lstbt_v.c +++ b/lib/lstbt_v.c @@ -37,10 +37,11 @@ static void dump_name(const char *router) snprintf(d_path, sizeof(d_path), "cat %s%s/device_name", tbt_sysfs_path, router); device = do_bash_cmd(d_path); - printf("%s %s ", vendor, device); - - free(vendor); - free(device); + printf("%s: %s %s ", router, znul(vendor), znul(device)); + if (vendor != NULL) + free(vendor); + if (device != NULL) + free(device); } static void dump_spaces(u64 spaces) -- 2.41.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor