All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andreas Steffen <andreas.steffen@hsr.ch>
To: Simon Horman <horms@verge.net.au>
Cc: "Steffen Andreas (asteffen@hsr.ch)" <asteffen@hsr.ch>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	jamal <hadi@cyberus.ca>
Subject: Re: static inline int xfrm_mark_get() broken
Date: Wed, 30 Jun 2010 07:03:05 +0200	[thread overview]
Message-ID: <4C2AD009.40306@hsr.ch> (raw)
In-Reply-To: <20100630044637.GV2138@verge.net.au>

Hello Simon,

actually I don't care how this bug is going to be fixed, but with
sizeof(struct xfrm_mark) I'm dead certain that both the mark
value and mask are being copied. Actually in the next inline
function right below sizeof(struct xfrm_mark) is used, too:

static inline int xfrm_mark_put(struct sk_buff *skb, struct xfrm_mark *m)
{
    if (m->m | m->v)
       NLA_PUT(skb, XFRMA_MARK, sizeof(struct xfrm_mark), m);
    return 0;

Regards

Andreas

On 06/30/2010 06:46 AM, Simon Horman wrote:
> On Mon, Jun 28, 2010 at 08:46:49PM +0200, Andreas Steffen wrote:
>> Hi,
>>
>> experimenting with the new XFRM_MARK feature of the 2.6.34 kernel
>> I found out that the extraction of the mark mask might accidentally
>> work on 64 bit platforms but on 32 bit platforms the function is
>> awfully broken. The rather trivial patch attached to this mail fixes
>> the problem. Otherwise the XFRM_MARK feature seems quite promising!
>>
>> Best regards
>>
>> Andreas
>>
>> ======================================================================
>> Andreas Steffen                         e-mail: andreas.steffen@hsr.ch
>> Institute for Internet Technologies and Applications
>> Hochschule fuer Technik Rapperswil      phone:  +41 55 222 42 68
>> CH-8640 Rapperswil (Switzerland)        mobile: +41 76 340 25 56
>> ===========================================================[ITA-HSR]==
> 
>> --- linux/include/net/xfrm.h.ori	2010-06-28 18:53:28.229489876 +0200
>> +++ linux/include/net/xfrm.h	2010-06-28 18:53:50.745487383 +0200
>> @@ -1587,7 +1587,7 @@
>>  static inline int xfrm_mark_get(struct nlattr **attrs, struct xfrm_mark *m)
>>  {
>>  	if (attrs[XFRMA_MARK])
>> -		memcpy(m, nla_data(attrs[XFRMA_MARK]), sizeof(m));
>> +		memcpy(m, nla_data(attrs[XFRMA_MARK]), sizeof(struct xfrm_mark));
> 
> This fix looks correct to me, but
> I believe that sizeof(*m) is the preferred style.
> 
>>  	else
>>  		m->v = m->m = 0;

======================================================================
Andreas Steffen                         e-mail: andreas.steffen@hsr.ch
Institute for Internet Technologies and Applications
Hochschule fuer Technik Rapperswil      phone:  +41 55 222 42 68
CH-8640 Rapperswil (Switzerland)        mobile: +41 76 340 25 56
===========================================================[ITA-HSR]==

  reply	other threads:[~2010-06-30  6:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-28 18:46 static inline int xfrm_mark_get() broken Andreas Steffen
2010-06-30  4:46 ` Simon Horman
2010-06-30  5:03   ` Andreas Steffen [this message]
2010-06-30  7:01     ` Simon Horman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C2AD009.40306@hsr.ch \
    --to=andreas.steffen@hsr.ch \
    --cc=asteffen@hsr.ch \
    --cc=hadi@cyberus.ca \
    --cc=horms@verge.net.au \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.