[PATCH v3 2/6] ctrl_iface: MLO: introduce MLD level socket
Aditya Kumar Singh
quic_adisi at quicinc.com
Mon Aug 5 22:28:05 PDT 2024
On 8/5/24 22:55, Jouni Malinen wrote:
> On Thu, Aug 01, 2024 at 10:21:39PM +0530, Aditya Kumar Singh wrote:
>> With MLO, each link have socket created with "<ifname>_link<link id>" under
>> the control interface directory.
>>
>> Introduce a MLD level socket - "<ifname>" as well under the same control
>> interface directory. This socket can be used to pass the command to its
>> partner links directly instead of using the link level socket. Link ID
>> needs to be passed with the command.
>>
>> The structure of the command is -
>> "<COMMAND APPLICABALE FOR THE LINK> LINKID <link id>"
>
> That feels quite problematic since "LINKID" could occur in a valid
> command, e.g., when setting a string parameter. This "LINKID <link id>"
> part would likely need to be a prefix instead of postfix for the command
> to make this more robust.
>
Sure will move to prefix. Thanks for the suggestion.
>> diff --git a/hostapd/ctrl_iface.c b/hostapd/ctrl_iface.c
>
>> +static int hostapd_mld_ctrl_iface_receive_process(struct hostapd_mld *mld,
>
>> + /* Check if link id is provided in the command or not */
>> + link_cmd = os_strstr(buf, "LINKID");
>> + if (link_cmd) {
>> + /* Trim the link id part now */
>> + *(link_cmd - 1) = '\0';
>
> That needs bounds checking.. The received command could start with
> "LINKID" and that -1 would make this write before the start of the
> buffer. Though, my comment above will likely make this not applicable,
> but anyway, all commands received from the control interface needs to be
> fully verified to be valid to avoid security issues.
Sure got it.
>
>> + } else if (os_strcmp(buf, "ATTACH") == 0) {
>> + if (hostapd_mld_ctrl_iface_attach(mld, from, fromlen, NULL))
>> + reply_len = -1;
>> + } else if (os_strncmp(buf, "ATTACH ", 7) == 0) {
>> + if (hostapd_mld_ctrl_iface_attach(mld, from, fromlen, buf + 7))
>> + reply_len = -1;
>> + } else if (os_strcmp(buf, "DETACH") == 0) {
>> + if (hostapd_mld_ctrl_iface_detach(mld, from, fromlen))
>> + reply_len = -1;
>
> Is there a plan to use those hostapd_mld_ctrl_iface_{attach,detach}()
> functions for something else than for wrapping a call to
> ctrl_iface_{attach,detach}()? I would simply call the existing functions
> directly instead of going through that minimal wrapper function.
>
I don't have any plans as of now. Sure, I will directly call the
functions instead of the wrapper.
>> +static void hostapd_mld_ctrl_iface_receive(int sock, void *eloop_ctx,
>
>> + os_snprintf(buf, len, "%s/%s", mld->ctrl_interface, mld->name);
>> + buf[len - 1] = '\0';
>
> Instead of hardcoding \0 termination, it would be better to explicitly
> check the os_snprintf() return value with os_snprintf_error() to catch
> all truncation cases.
Sure will do.
--
Aditya
More information about the Hostap
mailing list