On Thu, Dec 1, 2016 at 10:31 PM, Yuri Gribov <tetra2...@gmail.com> wrote:

> Just curious, why did you chose to break ABI rather than reuse natural
> padding?


natural padding is usually zero.
And asan needs objects to be aligned by 8 and then have redzones.


> As for complexity - was it caused by user code relying on
> implementation details (e.g. exact struct layout) or something else?
>

Mostly that.
Like taking sizeof of a non-POD type and expecting it to be equal to
something.
But I've also got lost in clang complexities. (C++ is much more complex
than a compiler IR,
and so Clang is much more complex than LLVM)


>
> On Fri, Dec 2, 2016 at 8:18 AM, Konstantin Serebryany
> <konstantin.s.serebry...@gmail.com> wrote:
> > This is much harder than it sounds.
> > I've made an attempt ~2 years ago and it almost, but not quite entirely,
> > worked....
> > https://github.com/google/sanitizers/wiki/AddressSanitizerIntraObjectOve
> rflow
> > (Only for non POD objects in C++, so it won't directly apply to C at all)
> >
> > And I totally agree that this is a large missing piece in asan.
> >
> > --kcc
> >
> > On Thu, Dec 1, 2016 at 9:31 PM, Yuri Gribov <tetra2...@gmail.com> wrote:
> >>
> >> On Fri, Dec 2, 2016 at 7:22 AM, Yuri Gribov <tetra2...@gmail.com>
> wrote:
> >> > On Fri, Dec 2, 2016 at 6:35 AM, Maxim Ostapenko <chefm...@gmail.com>
> >> > wrote:
> >> >> Hi,
> >> >>
> >> >> 02 Дек 2016 г. 7:30 пользователь "steven shi" <shijunj...@gmail.com>
> >> >> написал:
> >> >>>
> >> >>> Hello,
> >> >>> With the experts' help in this community, I've enabled the Asan for
> >> >>> global
> >> >>> and stack buffer in my bare-mental platform firmware, thanks a lot.
> >> >>> But I find the current Asan doesn't support to protect the structure
> >> >>> inner
> >> >>> elements, E.g. the global_array[11] in below code. Unfortunately,
> most
> >> >>> of
> >> >>> important data are defined through structure in my firmware, and if
> >> >>> the Asan
> >> >>> doesn't support to protect structure inner elements, most of my data
> >> >>> memory
> >> >>> access will not be protected by Asan. So, could we let Asan support
> >> >>> structure inner elements?
> >> >>>
> >> >>> Well, I understand it is not safe to just instrument red-zone
> between
> >> >>> structure inner elements like current Asan does on global variable.
> >> >>> We also
> >> >>> need to handle the sizeof(), offsetof() macro, the alignment pragma,
> >> >>> and
> >> >>> maybe others. Could we extend Asan scope beyond IR to Clang
> front-end
> >> >>> to do
> >> >>> some source-to-source conversion to handle these issue? E.g. for no
> >> >>> alignment enforced structure,  replace the structure inner elements
> >> >>> with
> >> >>> red-zone instrumented version, and let the sizeof() be-aware of the
> >> >>> size
> >> >>> change. Is it possible?
> >> >>
> >> >> Won't this break separate sanitization? E.g. if I have libfoo.so that
> >> >> has
> >> >> struct Foo as part of its ABI and I want to test it with ASan, I'll
> >> >> need to
> >> >> recompile not only libfoo.so, but all dependent libraries too to make
> >> >> sure
> >> >> they caught up the changed layout of struct Foo. This sounds like a
> bad
> >> >> idea
> >> >> for me.
> >> >> Or maybe I've just missed something?
> >> >
> >> > I think Steven's code is self-contained so he does not care. Also note
> >> > that you can get away without breaking ABI but just poisoning natural
> >> > padding in structures. I guess the main problem with sanitizing
> >> > structs is that they are often passed to "low-level"
> >> > memcmp/memcpy/memset/etc. functions which would result in spurious
> >> > errors.
> >>
> >> Also in C you don't get type information as easily as with C++'s new
> >> operator. Structs are allocated as untyped memory buffers via malloc
> >> and then casted to appropriate type. Compiler will have to figure out
> >> that newly allocated char*-pointer is meant to point to struct (which
> >> is not always possible e.g. if malloc happens in a different function
> >> in separate translation unit).
> >>
> >> -I
> >>
> >> --
> >> You received this message because you are subscribed to the Google
> Groups
> >> "address-sanitizer" group.
> >> To unsubscribe from this group and stop receiving emails from it, send
> an
> >> email to address-sanitizer+unsubscr...@googlegroups.com.
> >> For more options, visit https://groups.google.com/d/optout.
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "address-sanitizer" group.
> > To unsubscribe from this group and stop receiving emails from it, send an
> > email to address-sanitizer+unsubscr...@googlegroups.com.
> > For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups
> "address-sanitizer" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to address-sanitizer+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"address-sanitizer" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to address-sanitizer+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to