[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI
From: |
Daniel P . Berrangé |
Subject: |
Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI |
Date: |
Tue, 2 Mar 2021 15:38:23 +0000 |
User-agent: |
Mutt/2.0.5 (2021-01-21) |
On Tue, Mar 02, 2021 at 08:18:03AM -0500, Daniele Buono wrote:
> On 3/2/2021 5:30 AM, Daniel P. Berrangé wrote:
> > On Mon, Mar 01, 2021 at 03:39:42PM -0500, Daniele Buono wrote:
> > > Hi Daniel,
> > >
> > > On 3/1/2021 10:08 AM, Daniel P. Berrangé wrote:
> > > > What are the unique failure scenarios for CFI that these jobs are
> > > > likely to expose ? Is it likely that we'll have cases where
> > > > CFI succeeds in say, x86_64 target, but fails in aarch64 target ?
> > > For CFI to fail (even if it shouldn't) you'll need code that is calling a
> > > function pointer that was not well defined at compile time. Although
> > > unlikely, that could happen everywhere in the code.
> > What does "was not well defined" mean here ?
> >
>
> At high level, the compiler creates metadata for every function. Before
> jumping to a function pointer, it makes sure that the pointer and the
> pointee have matching types.
> Not well defined means one of these two cases:
> 1. The function has a different type than the pointer -> Most likely an
> error
How strictly is this checked ? With GLib function prototype mismatch
is not uncommon. For example GLib might need to invoke a callback with
a signature:
int foo(int somearg, void *opaque);
The API though will often declare the callback signature to be
generic
void (*GCallback) (void);
The caller will implement a callback with
int foo(int somearg, mytype *mydata);
and will use G_CALLBACK() to do an intentional bad cast to GCallback
Before it invokes the callback, GLib would cast from GCallback back
to int foo(int somearg, void *opaque);
Notice this last arg doesn't match the type of the actual implemented
callback.
Is this scenario going to upset CFI, or is it happy that 'void *'
is compatible with 'mytype *', and ok with the intermediate casts
to/from GCallback ?
> 2. The function was not available at compile time so the compiler could
> not create the related metadata -> Most likely a false positive.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniel P . Berrangé, 2021/03/01
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniele Buono, 2021/03/01
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniel P . Berrangé, 2021/03/01
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniele Buono, 2021/03/01
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniel P . Berrangé, 2021/03/02
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniele Buono, 2021/03/02
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI,
Daniel P . Berrangé <=
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniele Buono, 2021/03/02
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniel P . Berrangé, 2021/03/02
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniele Buono, 2021/03/02
- Re: [PATCH v2 0/2] gitlab-ci.yml: Add jobs to test CFI, Daniel P . Berrangé, 2021/03/03