Message ID | 1c250a41df7bedb3ede446d891a317b491df092f.1554106524.git.lucien.xin@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | teamd: tdport has to exist if item->per_port is set in __find_by_item_path | expand |
Mon, Apr 01, 2019 at 10:15:24AM CEST, lucien.xin@gmail.com wrote: >The issue can be reproduced by: > > # teamd -c '{"device":"team0", "runner":{"name":"lacp"}}' & > # teamdctl team0 state item set runner.aggregator.selected true > >teamd process will abort in lacp_port_state_aggregator_selected_set() >as gsc->info.tdport was set to NULL in teamd_state_item_value_set() > >The item 'runner.aggregator.selected' is of per_port = true, and it >shouldn't allow to call its setter/getter(). > >This patch is to add the check for it in __find_by_item_path() called >by teamd_state_item_value_get/set(). > >Fixes: 6c00aaf02553 ("teamd: add support for state item write operation") >Signed-off-by: Xin Long <lucien.xin@gmail.com> applied, thanks!
diff --git a/teamd/teamd_state.c b/teamd/teamd_state.c index ab64db9..0714880 100644 --- a/teamd/teamd_state.c +++ b/teamd/teamd_state.c @@ -333,6 +333,7 @@ static int __find_by_item_path(struct teamd_state_val_item **p_item, list_for_each_node_entry(item, &ctx->state_val_list, list) { /* item->subpath[0] == '.' */ if (!strcmp(item->subpath + 1, subpath) && + (!item->per_port || tdport) && (!item->tdport || item->tdport == tdport)) { *p_item = item; *p_tdport = tdport;
The issue can be reproduced by: # teamd -c '{"device":"team0", "runner":{"name":"lacp"}}' & # teamdctl team0 state item set runner.aggregator.selected true teamd process will abort in lacp_port_state_aggregator_selected_set() as gsc->info.tdport was set to NULL in teamd_state_item_value_set() The item 'runner.aggregator.selected' is of per_port = true, and it shouldn't allow to call its setter/getter(). This patch is to add the check for it in __find_by_item_path() called by teamd_state_item_value_get/set(). Fixes: 6c00aaf02553 ("teamd: add support for state item write operation") Signed-off-by: Xin Long <lucien.xin@gmail.com> --- teamd/teamd_state.c | 1 + 1 file changed, 1 insertion(+)