From: Steffen Klassert <steffen.klassert@secunet.com>
To: Dave Hansen <dave@linux.vnet.ibm.com>
Cc: Eric Paris <eparis@redhat.com>,
linux-kernel@vger.kernel.org,
linux-security-module@vger.kernel.org
Subject: Re: flex_array related problems on selinux policy loading
Date: Fri, 21 Jan 2011 08:20:22 +0100 [thread overview]
Message-ID: <20110121072022.GA3070@secunet.com> (raw)
In-Reply-To: <1295537330.9039.583.camel@nimitz>
On Thu, Jan 20, 2011 at 07:28:50AM -0800, Dave Hansen wrote:
> On Thu, 2011-01-20 at 13:26 +0100, Steffen Klassert wrote:
> ...
> > @@ -187,6 +195,9 @@ int flex_array_put(struct flex_array *fa, unsigned int element_nr, void *src,
> > struct flex_array_part *part;
> > void *dst;
> >
> > + if (unlikely(ZERO_OR_NULL_PTR(fa)))
> > + return 0;
>
> I think it's OK to add these for the array alloc and free cases. But,
> it's really dangerous to do it for put. It has the potential to
> silently throw away data and then be really confusing to debug when you
> can't get it back later.
If the pointer to struct flex_array is a ZERO_SIZE_PTR we have to exit
before we try to dereference the first time as we have not allocated
anything. We can think about returning an error value in flex_array_put
if the flex_array is a ZERO_SIZE_PTR. The the user would be notified
that we could not store his data, but that's all we can do here I think.
Anyway, I just noticed in some functions the line
int part_nr = fa_element_to_part_nr(fa, element_nr);
which already dereferences the flex_array before I test for ZERO_SIZE_PTR.
So I have to fix this and to resubmit the patch.
>
> This can only make sense if you have a zero-byte element. However, this
> would also just return if you happened to try and insert data in to a
> zero-length array. That's a bug we need to catch. Note that
> kmem_cache_create() doesn't let you create caches for zero-byte objects.
>
> > @@ -215,6 +226,9 @@ int flex_array_clear(struct flex_array *fa, unsigned int element_nr)
> > struct flex_array_part *part;
> > void *dst;
> >
> > + if (unlikely(ZERO_OR_NULL_PTR(fa)))
> > + return 0;
>
> I tend to think about the flex_array itself as being more like a
> kmem_cache than anything else. So, all of the operations on the array
> itself, like shrinking and growing are probably OK.
Hm, if either element_size or total_nr_elements is zero on allocation time,
the maximum size the array can ever have is zero. So I don't see how to
grow (shrink) anything in this case. Do I miss something here?
>
> Can you also pull the unlikely()s?
>
Usually, when you call flex_array_alloc you want to allocate some memory.
So I considered a zero size allocation as a rare corner case, like kmalloc
does. Therefore the unlikely branch predictors made sense for me. Anyway,
I don't have a strong opinion about the unlikelys, so if you think it is
better to remove them I'll do so.
Steffen
next prev parent reply other threads:[~2011-01-21 7:20 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-20 12:26 flex_array related problems on selinux policy loading Steffen Klassert
2011-01-20 15:28 ` Dave Hansen
2011-01-21 7:20 ` Steffen Klassert [this message]
2011-01-21 15:57 ` Dave Hansen
2011-01-26 10:23 ` Steffen Klassert
2011-01-26 16:10 ` Dave Hansen
2011-01-27 12:15 ` Steffen Klassert
2011-01-31 8:08 ` Steffen Klassert
2011-01-26 13:04 ` Steffen Klassert
2011-01-26 16:15 ` Dave Hansen
2011-01-27 12:46 ` Steffen Klassert
2011-01-27 16:57 ` Dave Hansen
2011-01-31 8:00 ` Steffen Klassert
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=20110121072022.GA3070@secunet.com \
--to=steffen.klassert@secunet.com \
--cc=dave@linux.vnet.ibm.com \
--cc=eparis@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@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.