Skip to contentSkip to conversation

possible rose recvmsg behavior change after msg_namelen fixes

DISCUSSION Florian Westphal 2 participants 2 messages Dec 20, 2013

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Hi.

recvmsg handler in net/rose/af_rose.c performs size-check on ->msg_namelen:

if (msg->msg_namelen >= sizeof(struct full_sockaddr_rose)) {
/* something */
} else {
/* else */
}

Now that msg_namelen is zeroed before the handler calls we always hit the 'else' branch.

TBH i don't comprehend how this was/is supposed to work.

Could someone who is familiar with AF_ROSE look at this, before I send untested patch that blindly chops off code?

Thanks!

#1 lore raw
Quoted 11 lines · Florian Westphal

Hi.

recvmsg handler in net/rose/af_rose.c performs size-check on ->msg_namelen:

if (msg->msg_namelen >= sizeof(struct full_sockaddr_rose)) {
/* something */
} else {
/* else */
}

Quoted 7 lines

Now that msg_namelen is zeroed before the handler calls we always hit the 'else' branch.

TBH i don't comprehend how this was/is supposed to work.

Could someone who is familiar with AF_ROSE look at this, before I send untested patch that blindly chops off code?

Good catch, thanks!

If in doubt I would just replace msg->msg_namelen with sizeof(struct sockaddr_storage) and do manual constant folding. ;)

I still have some patches in this area (somehow validating msg_namelen before calling down to recvmsg, so that we don't dequeue a skb if the msg_name logic would error out when writing the result back to user space).

The patch is still a mess but maybe we can pass the actual user-supplied msg_namelen down then, eventually.