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 :|