[libcamera-devel] [PATCH] utils: ipc: Fix deserialization of multiple fd parameters

Paul Elder paul.elder at ideasonboard.com
Tue Jan 9 14:04:44 CET 2024


On Tue, Jan 09, 2024 at 12:53:20PM +0000, Kieran Bingham wrote:
> Quoting Paul Elder (2023-12-12 08:47:45)
> > On Mon, Dec 11, 2023 at 01:45:20PM +0000, Kieran Bingham wrote:
> > > Quoting Paul Elder via libcamera-devel (2023-12-11 10:56:38)
> > > > There was a bug where the code generated for deserialization of function
> > > > parameters would fail if there were multiple file descriptor parameters.
> > > 
> > > Why? It's hard to decifer that code change. Probably especially as
> > > there's very little context in the patch.
> > 
> > I suppose more clearly it's "the deserialization code wouldn't be
> > generated for the last file descriptor parameter".
> > 
> > > 
> > > Was it previously not expecting FileDescriptors in the last entry?
> > 
> > It was an optimization to get rid of unused code iirc. Evidently I
> > didn't test it with multiple fd parameters.
> > 
> > > 
> > > > Fix this.
> > > 
> > > by ... processing the fds on each iteration?
> > 
> > Yes :) As opposed to skipping the last one.
> 
> Ok, then:
> 
> 
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

Thanks.

> 
> I think an updated commit message could help here:
> 
> """
> The IPADataSerializer::deserialiser attempts to optimise code paths and

s/deserialiser/deserializer/

> remove potentially unused code where multiple File Descriptors were not
> expected to be utilised.

Not quite... it optimized the generated code to not deserialize the
*last* file descriptor when there were multiple fds directly in the
parameters of an IPC call.

> The addition of multiple SharedFD entries in the IPC highlights this as
> a bug. 
> 
> Clean up the conditionals to ensure that all File Descriptors are
> correctly deserialized.

Yes.

> """
> 
> Any objections?

Just that one up there.


Thanks,

Paul

> 
> > 
> > 
> > Paul
> > 
> > > 
> > > > 
> > > > Bug: https://bugs.libcamera.org/show_bug.cgi?id=205
> > > > Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> > > > ---
> > > >  utils/ipc/generators/libcamera_templates/proxy_functions.tmpl | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > > 
> > > > diff --git a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl b/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl
> > > > index 2be65d432..b5797b149 100644
> > > > --- a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl
> > > > +++ b/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl
> > > > @@ -186,7 +186,7 @@ IPADataSerializer<{{param|name}}>::deserialize(
> > > >  {% for param in params|with_fds %}
> > > >  {%- if loop.first %}
> > > >         const size_t {{param.mojom_name}}FdStart = 0;
> > > > -{%- elif not loop.last %}
> > > > +{%- else %}
> > > >         const size_t {{param.mojom_name}}FdStart = {{loop.previtem.mojom_name}}FdStart + {{loop.previtem.mojom_name}}FdsSize;
> > > >  {%- endif %}
> > > >  {%- endfor %}
> > > > -- 
> > > > 2.39.2
> > > >


More information about the libcamera-devel mailing list