public inbox for linux-audit@redhat.com
 help / color / mirror / Atom feed
* Bad bug in remote logging
@ 2011-04-11 23:00 Steve Grubb
  2011-04-12  3:18 ` Linda Knippers
  0 siblings, 1 reply; 4+ messages in thread
From: Steve Grubb @ 2011-04-11 23:00 UTC (permalink / raw)
  To: Linux Audit

Hello,

There was a bug reported to day that I think merits an email and/or discussion.

https://bugzilla.redhat.com/show_bug.cgi?id=695419
=================================
audisp-remote does
>               memset (&address, 0, sizeof(address));
>               address.sin_family = htons(AF_INET);
>               address.sin_port = htons(config.local_port);
>               address.sin_addr.s_addr = htonl(INADDR_ANY);
which shows in strace as

> bind(3, {sa_family=0x200 /* AF_??? */, sa_data="\0<\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 
0

For some reason the call still succeeds, but a correct invocation would not
call htons on AF_INET.
================================

The reason it succeeds is because there is a matching mistake in auditd. So, what this 
means is that remote logging is not using IPv4, but something else. I committed a 
patch to fix this in trunk:

https://fedorahosted.org/audit/changeset/505

This would cause new systems and old systems to not be able to talk to one another. 
Regarding RHEL, remote logging has been tech preview, meaning that its alpha code and 
likely buggy but available so you can see where this is heading. So, I think we can 
just change it to be correct. For Fedora, there is no tech preview and everything is 
supported...but it has a short life. However, what the code was doing is clearly 
wrong. So, I am thinking to fix this all the way back to F-13 if I can. Regarding other 
distributions...not sure what the support status is or how they would like to choose 
to solve this. Anyone have any thoughts on this?

-Steve

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Bad bug in remote logging
  2011-04-11 23:00 Bad bug in remote logging Steve Grubb
@ 2011-04-12  3:18 ` Linda Knippers
  2011-04-12  7:23   ` Stephan Mueller
  0 siblings, 1 reply; 4+ messages in thread
From: Linda Knippers @ 2011-04-12  3:18 UTC (permalink / raw)
  To: Steve Grubb; +Cc: Linux Audit

Steve Grubb wrote:
> Hello,
> 
> There was a bug reported to day that I think merits an email and/or discussion.
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=695419
> =================================
> audisp-remote does
>>               memset (&address, 0, sizeof(address));
>>               address.sin_family = htons(AF_INET);
>>               address.sin_port = htons(config.local_port);
>>               address.sin_addr.s_addr = htonl(INADDR_ANY);
> which shows in strace as
> 
>> bind(3, {sa_family=0x200 /* AF_??? */, sa_data="\0<\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 
> 0
> 
> For some reason the call still succeeds, but a correct invocation would not
> call htons on AF_INET.

Are you sure that that field is actually used by bind()?  Doesn't the
socket also have the address family?  Its surprising that the call would
succeed and even more surprising that the socket would work.

> ================================
> 
> The reason it succeeds is because there is a matching mistake in auditd. So, what this 
> means is that remote logging is not using IPv4, but something else. 

What else would it be using?  That value is greater than any legal 
address family so I would think that lots of things in the kernel
would break.

> I committed a 
> patch to fix this in trunk:
> 
> https://fedorahosted.org/audit/changeset/505
> 
> This would cause new systems and old systems to not be able to talk to one another. 
> Regarding RHEL, remote logging has been tech preview, meaning that its alpha code and 
> likely buggy but available so you can see where this is heading. So, I think we can 
> just change it to be correct. For Fedora, there is no tech preview and everything is 
> supported...but it has a short life. However, what the code was doing is clearly 
> wrong. So, I am thinking to fix this all the way back to F-13 if I can. Regarding other 
> distributions...not sure what the support status is or how they would like to choose 
> to solve this. Anyone have any thoughts on this?

Your resolution seems ok if this is really more than a benign coding
problem.

-- ljk

> 
> -Steve
> 
> --
> Linux-audit mailing list
> Linux-audit@redhat.com
> https://www.redhat.com/mailman/listinfo/linux-audit

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Bad bug in remote logging
  2011-04-12  3:18 ` Linda Knippers
@ 2011-04-12  7:23   ` Stephan Mueller
  2011-04-12 13:09     ` Steve Grubb
  0 siblings, 1 reply; 4+ messages in thread
From: Stephan Mueller @ 2011-04-12  7:23 UTC (permalink / raw)
  To: linux-audit

Am Dienstag, 12. April 2011, um 05:18:44 schrieb Linda Knippers:

Hi Linda,

> Steve Grubb wrote:
> > Hello,
> > 
> > There was a bug reported to day that I think merits an email and/or
> > discussion.
> > 
> > https://bugzilla.redhat.com/show_bug.cgi?id=695419
> > =================================
> > audisp-remote does
> > 
> >>               memset (&address, 0, sizeof(address));
> >>               address.sin_family = htons(AF_INET);
> >>               address.sin_port = htons(config.local_port);
> >>               address.sin_addr.s_addr = htonl(INADDR_ANY);
> > 
> > which shows in strace as
> > 
> >> bind(3, {sa_family=0x200 /* AF_??? */,
> >> sa_data="\0<\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) =

Bind does not do anything with the family - it just calls the bind callback 
function set for the protocol by the socket syscall. What is the socket 
syscall saying here?

Note that the socket syscall (specifically __sock_create) has the following 
code for the family:

        if (family < 0 || family >= NPROTO)
                return -EAFNOSUPPORT;

And NPROTO is defined as decimal 39 (in 2.6.38). Hence, 0x200 as a family does 
not work for socket - the socket syscall would have returned an error.

If for some reason the socket syscall uses AF_INET and diverts into IPv4, 
sin_family does not seem to be used unless you have a socket-specific bind 
function (e.g. RAW sockets).

To make a final determination on the impact, I would check:

- strace for socket syscall

- tcpdump on the connection

Ciao
Stephan

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Bad bug in remote logging
  2011-04-12  7:23   ` Stephan Mueller
@ 2011-04-12 13:09     ` Steve Grubb
  0 siblings, 0 replies; 4+ messages in thread
From: Steve Grubb @ 2011-04-12 13:09 UTC (permalink / raw)
  To: Stephan Mueller; +Cc: linux-audit

On Tuesday, April 12, 2011 03:23:08 AM Stephan Mueller wrote:
> Am Dienstag, 12. April 2011, um 05:18:44 schrieb Linda Knippers:
> 
> Hi Linda,
> 
> > Steve Grubb wrote:
> > > Hello,
> > > 
> > > There was a bug reported to day that I think merits an email and/or
> > > discussion.
> > > 
> > > https://bugzilla.redhat.com/show_bug.cgi?id=695419
> > > =================================
> > > audisp-remote does
> > > 
> > >>               memset (&address, 0, sizeof(address));
> > >>               address.sin_family = htons(AF_INET);
> > >>               address.sin_port = htons(config.local_port);
> > >>               address.sin_addr.s_addr = htonl(INADDR_ANY);
> > > 
> > > which shows in strace as
> > > 
> > >> bind(3, {sa_family=0x200 /* AF_??? */,
> > >> sa_data="\0<\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) =
> 
> Bind does not do anything with the family - it just calls the bind callback
> function set for the protocol by the socket syscall. What is the socket
> syscall saying here?

The socket call is correct.
socket (AF_INET, SOCK_STREAM, 0);


> Note that the socket syscall (specifically __sock_create) has the following
> code for the family:
> 
>         if (family < 0 || family >= NPROTO)
>                 return -EAFNOSUPPORT;
> 
> And NPROTO is defined as decimal 39 (in 2.6.38). Hence, 0x200 as a family
> does not work for socket - the socket syscall would have returned an
> error.
> 
> If for some reason the socket syscall uses AF_INET and diverts into IPv4,
> sin_family does not seem to be used unless you have a socket-specific bind
> function (e.g. RAW sockets).

It seems that bind(2) is not using the family. I checked on a system that is fixed vs 
one that is not fixed. They both can transfer packets to one another. So, it looks like 
you are right and there is only cosmetic problem.
 
> To make a final determination on the impact, I would check:
> 
> - strace for socket syscall
> 
> - tcpdump on the connection

These seem to be OK aside from strace not being able to decipher the family member to 
bind. However, the calls to bind and connect are successful.

-Steve

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-04-12 13:09 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-11 23:00 Bad bug in remote logging Steve Grubb
2011-04-12  3:18 ` Linda Knippers
2011-04-12  7:23   ` Stephan Mueller
2011-04-12 13:09     ` Steve Grubb

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox