gpio: sim: quietly ignore configured lines outside the bank
PATCH 1/1 gpio: sim: quietly ignore configured lines outside the bank
The user-space policy of the gpio-sim is that configuration for lines with offsets outside the bounds of the corresponding bank is ignored, but gpio-sim is still using that configuration when constructing the sim. In the case of named lines this results in temporarily allocating space for names that are not used, and for hogs results in errors being logged when the gpio-sim attempts to register the out of range hog with gpiolib:
gpiochip_machine_hog: unable to get GPIO desc: -22
Add checks to filter out any line configuration outside the bounds of the bank when constructing the sim.
---
This is based on for-next patched with my recent memory corruption fix, as it touches a bit of the same code.
Cheers,
Kent.
drivers/gpio/gpio-sim.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
drivers/gpio/gpio-sim.c +12 -0
@@ -696,6 +696,9 @@ static char **gpio_sim_make_line_names(struct gpio_sim_bank *bank,char **line_names;list_for_each_entry (line, &bank->line_list, siblings) { +if (line->offset >= bank->num_lines) +continue ; +if (line->name) {if (line->offset > max_offset) max_offset = line->offset;
@@ -722,6 +725,9 @@ static char **gpio_sim_make_line_names(struct gpio_sim_bank *bank,return ERR_PTR (-ENOMEM );list_for_each_entry (line, &bank->line_list, siblings) { +if (line->offset >= bank->num_lines) +continue ; +if (line->name && (line->offset <= max_offset)) line_names[line->offset] = line->name; }
@@ -756,6 +762,9 @@ static int gpio_sim_add_hogs(struct gpio_sim_device *dev)list_for_each_entry (bank, &dev->bank_list, siblings) {list_for_each_entry (line, &bank->line_list, siblings) { +if (line->offset >= bank->num_lines) +continue ; +if (line->hog) num_hogs++; }
@@ -771,6 +780,9 @@ static int gpio_sim_add_hogs(struct gpio_sim_device *dev)list_for_each_entry (bank, &dev->bank_list, siblings) {list_for_each_entry (line, &bank->line_list, siblings) { +if (line->offset >= bank->num_lines) +continue ; +if (!line->hog)continue ;
base-commit: ba65c79fbb813423e7d42d99375e2045b27958a6
prerequisite-patch-id: d89da2e3b7511c5b8132a379b12e4996256ac214
Signature · 1 line
2.40.1
Bartosz Golaszewski
AppliedQuoted 71 lines · Kent Gibson
The user-space policy of the gpio-sim is that configuration for lines with offsets outside the bounds of the corresponding bank is ignored, but gpio-sim is still using that configuration when constructing the sim. In the case of named lines this results in temporarily allocating space for names that are not used, and for hogs results in errors being logged when the gpio-sim attempts to register the out of range hog with gpiolib:
gpiochip_machine_hog: unable to get GPIO desc: -22Add checks to filter out any line configuration outside the bounds of the bank when constructing the sim.
Signed-off-by Kent Gibson <[email protected]>---
This is based on for-next patched with my recent memory corruption fix, as it touches a bit of the same code.
Cheers,
Kent.drivers/gpio/gpio-sim.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)drivers/gpio/gpio-sim.c +12
-0@@ -696,6 +696,9 @@ static char **gpio_sim_make_line_names(struct gpio_sim_bank *bank,char **line_names;list_for_each_entry (line, &bank->line_list, siblings) { +if (line->offset >= bank->num_lines) +continue ; +if (line->name) {if (line->offset > max_offset) max_offset = line->offset;@@ -722,6 +725,9 @@ static char **gpio_sim_make_line_names(struct gpio_sim_bank *bank,return ERR_PTR (-ENOMEM );list_for_each_entry (line, &bank->line_list, siblings) { +if (line->offset >= bank->num_lines) +continue ; +if (line->name && (line->offset <= max_offset)) line_names[line->offset] = line->name; }@@ -756,6 +762,9 @@ static int gpio_sim_add_hogs(struct gpio_sim_device *dev)list_for_each_entry (bank, &dev->bank_list, siblings) {list_for_each_entry (line, &bank->line_list, siblings) { +if (line->offset >= bank->num_lines) +continue ; +if (line->hog) num_hogs++; }@@ -771,6 +780,9 @@ static int gpio_sim_add_hogs(struct gpio_sim_device *dev)list_for_each_entry (bank, &dev->bank_list, siblings) {list_for_each_entry (line, &bank->line_list, siblings) { +if (line->offset >= bank->num_lines) +continue ; +if (!line->hog)continue ;
Quoted 5 lines
base-commit:
ba65c79fbb813423e7d42d99375e2045b27958a6
prerequisite-patch-id:d89da2e3b7511c5b8132a379b12e4996256ac214--
2.40.1
I queued this for fixes, thanks!
Bart
Quoted 11 lines · Bartosz Golaszewski
Quoted 7 lines · Kent Gibson
base-commit:
ba65c79fbb813423e7d42d99375e2045b27958a6
prerequisite-patch-id:d89da2e3b7511c5b8132a379b12e4996256ac214--
2.40.1I queued this for fixes, thanks!
Oh, ok. I didn't think it was serious enough for fixes, or I would've made the two patches a series. And included a Fixes on this one.
Cheers,
Kent.
Quoted 11 lines · Kent Gibson
Quoted 9 lines · Bartosz Golaszewski
Quoted 7 lines · Kent Gibson
base-commit:
ba65c79fbb813423e7d42d99375e2045b27958a6
prerequisite-patch-id:d89da2e3b7511c5b8132a379b12e4996256ac214--
2.40.1
Quoted 8 lines
Quoted 2 lines
I queued this for fixes, thanks!
Oh, ok. I didn't think it was serious enough for fixes, or I would've made the two patches a series. And included a Fixes on this one.
Cheers,
Kent.
It fixes a problem and is fairly small. Works as a fix for me.
Bart