[PATCH 1/2] Decode setsockopt() multicast arguments
Ben Noordhuis
info at bnoordhuis.nl
Tue May 26 14:39:26 UTC 2015
On Tue, May 26, 2015 at 4:26 PM, Dmitry V. Levin <ldv at altlinux.org> wrote:
> On Sat, Feb 07, 2015 at 08:17:46PM +0300, Dmitry V. Levin wrote:
>> On Sat, Feb 07, 2015 at 06:05:56PM +0100, Ben Noordhuis wrote:
>> > On Sat, Feb 7, 2015 at 12:55 AM, Dmitry V. Levin wrote:
>> > > On Thu, Feb 05, 2015 at 07:28:45PM +0100, Ben Noordhuis wrote:
>> > >> +#ifdef IP_ADD_MEMBERSHIP
>> > >> +static void
>> > >> +print_mreq(struct tcb *tcp, long addr, int len)
>> > >> +{
>> > >> + struct ip_mreq mreq;
>> > >> + if (len == sizeof(mreq) && umove(tcp, addr, &mreq) == 0) {
>> > >> + tprints("{imr_multiaddr=inet_addr(");
>> > >> + print_quoted_string(inet_ntoa(mreq.imr_multiaddr),
>> > >> + 16, QUOTE_0_TERMINATED);
>> > >> + tprints("), imr_interface=inet_addr(");
>> > >> + print_quoted_string(inet_ntoa(mreq.imr_interface),
>> > >> + 16, QUOTE_0_TERMINATED);
>> > >> + tprints(")}");
>> > >> + }
>> > >> + else {
>> > >> + printstr(tcp, addr, len);
>> > >> + }
>> > >> +}
>> > >
>> > > Is there any use to print the address with printstr if length is not
>> > > sizeof(ip_mreq) or umove has failed? Other sockopt parsers in such
>> > > situations just print the address in hex.
>> >
>> > Printing the raw data helps troubleshooting more than printing a
>> > memory address does, IMO. printstr() is also what print_getsockopt()
>> > and print_setsockopt() seem to fall back to. Let me know what you
>> > think is preferable.
>>
>> Agreed, lets fall back to printstr() in case of length mismatch.
>>
>> > I agree that there is no point calling printstr() when umove() fails,
>> > I'll update that.
>
> Are you still working on that update?
I have it on my todo list but the days don't have enough hours in
them. If someone else wants to pick up the patches, s/he has my
blessing; no attribution needed.
More information about the Strace-devel
mailing list