• SeongJae Park's avatar
    xen-blkback: fix persistent grants negotiation · fc9be616
    SeongJae Park authored
    Persistent grants feature can be used only when both backend and the
    frontend supports the feature.  The feature was always supported by
    'blkback', but commit aac8a70d ("xen-blkback: add a parameter for
    disabling of persistent grants") has introduced a parameter for
    disabling it runtime.
    
    To avoid the parameter be updated while being used by 'blkback', the
    commit caches the parameter into 'vbd->feature_gnt_persistent' in
    'xen_vbd_create()', and then check if the guest also supports the
    feature and finally updates the field in 'connect_ring()'.
    
    However, 'connect_ring()' could be called before 'xen_vbd_create()', so
    later execution of 'xen_vbd_create()' can wrongly overwrite 'true' to
    'vbd->feature_gnt_persistent'.  As a result, 'blkback' could try to use
    'persistent grants' feature even if the guest doesn't support the
    feature.
    
    This commit fixes the issue by moving the parameter value caching to
    'xen_blkif_alloc()', which allocates the 'blkif'.  Because the struct
    embeds 'vbd' object, which will be used by 'connect_ring()' later, this
    should be called before 'connect_ring()' and therefore this should be
    the right and safe place to do the caching.
    
    Fixes: aac8a70d ("xen-blkback: add a parameter for disabling of persistent grants")
    Cc: <stable@vger.kernel.org> # 5.10.x
    Signed-off-by: default avatarMaximilian Heyne <mheyne@amazon.de>
    Signed-off-by: default avatarSeongJae Park <sj@kernel.org>
    Reviewed-by: default avatarMaximilian Heyne <mheyne@amazon.de>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    Link: https://lore.kernel.org/r/20220715225108.193398-2-sj@kernel.orgSigned-off-by: default avatarJuergen Gross <jgross@suse.com>
    fc9be616
xenbus.c 29.4 KB