xenfs/xensyms: respect hypervisor's "next" indication
commit 5c4e79e29a9fe4ea132118ac40c2bc97cfe23077 upstream.
The interface specifies the symnum field as an input and output; the
hypervisor sets it to the next sequential symbol's index. xensyms_next()
incrementing the position explicitly (and xensyms_next_sym()
decrementing it to "rewind") is only correct as long as the sequence of
symbol indexes is non-sparse. Use the hypervisor-supplied value instead
to update the position in xensyms_next(), and use the saved incoming
index in xensyms_next_sym().
Cc: stable@kernel.org
Fixes: a11f4f0a4e
("xen: xensyms support")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
Message-ID: <15d5e7fa-ec5d-422f-9319-d28bed916349@suse.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
192b87608c
commit
9da005f884
@@ -48,7 +48,7 @@ static int xensyms_next_sym(struct xensyms *xs)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
set_xen_guest_handle(symdata->name, xs->name);
|
set_xen_guest_handle(symdata->name, xs->name);
|
||||||
symdata->symnum--; /* Rewind */
|
symdata->symnum = symnum; /* Rewind */
|
||||||
|
|
||||||
ret = HYPERVISOR_platform_op(&xs->op);
|
ret = HYPERVISOR_platform_op(&xs->op);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@@ -78,7 +78,7 @@ static void *xensyms_next(struct seq_file *m, void *p, loff_t *pos)
|
|||||||
{
|
{
|
||||||
struct xensyms *xs = m->private;
|
struct xensyms *xs = m->private;
|
||||||
|
|
||||||
xs->op.u.symdata.symnum = ++(*pos);
|
*pos = xs->op.u.symdata.symnum;
|
||||||
|
|
||||||
if (xensyms_next_sym(xs))
|
if (xensyms_next_sym(xs))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
Reference in New Issue
Block a user