| From 5c4e79e29a9fe4ea132118ac40c2bc97cfe23077 Mon Sep 17 00:00:00 2001 |
| From: Jan Beulich <jbeulich@suse.com> |
| Date: Wed, 12 Mar 2025 16:32:45 +0100 |
| Subject: xenfs/xensyms: respect hypervisor's "next" indication |
| |
| From: Jan Beulich <jbeulich@suse.com> |
| |
| 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: a11f4f0a4e18 ("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> |
| --- |
| drivers/xen/xenfs/xensyms.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/xen/xenfs/xensyms.c |
| +++ b/drivers/xen/xenfs/xensyms.c |
| @@ -48,7 +48,7 @@ static int xensyms_next_sym(struct xensy |
| return -ENOMEM; |
| |
| set_xen_guest_handle(symdata->name, xs->name); |
| - symdata->symnum--; /* Rewind */ |
| + symdata->symnum = symnum; /* Rewind */ |
| |
| ret = HYPERVISOR_platform_op(&xs->op); |
| if (ret < 0) |
| @@ -78,7 +78,7 @@ static void *xensyms_next(struct seq_fil |
| { |
| struct xensyms *xs = (struct xensyms *)m->private; |
| |
| - xs->op.u.symdata.symnum = ++(*pos); |
| + *pos = xs->op.u.symdata.symnum; |
| |
| if (xensyms_next_sym(xs)) |
| return NULL; |