|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 6/9] livepatch: Add parsing for the symbol+0x<offset>/<len>
>>> On 14.08.16 at 23:52, <konrad.wilk@xxxxxxxxxx> wrote:
> in case we want to patch at specific offsets inside
> a function. (for example if we want to do NOP patching).
>
> We also assume that the 'len' is only the size of
> an isns that would be for a call opcode (so 5 bytes
> on x86, and 4 on ARM 32/64).
Which makes the notation using a slash quite confusing: Normally
if we see <symbol>+<offset>/<length> the length part is assumed
to be the overall size of the object/function the name refers to.
Could I talk you into using a different separator, like colon or
semicolon?
> --- a/xen/common/livepatch.c
> +++ b/xen/common/livepatch.c
> @@ -234,14 +234,46 @@ static const char *livepatch_symbols_lookup(unsigned
> long addr,
>
> static int lookup_symbol(struct livepatch_func *f, struct livepatch_elf *elf)
> {
> + const char *s;
> + char *plus = NULL, *slash = NULL;
Pointless initializers, afaict. Also the latter can be const.
> + unsigned long offset = 0;
> +
> if ( f->old_addr )
> return 0;
>
> + s = f->name;
> + /* +<offset>/<len> */
> + plus = strchr(f->name, '+');
> + if ( plus )
> + {
> + slash = strchr(plus, '/');
> +
> + if ( slash )
> + {
> + const char *endp = NULL;
> + unsigned int len;
> +
> + offset = simple_strtoul(plus+1, &endp, 16);
Missing blanks around +.
> + if ( endp != slash )
> + return -EINVAL;
> +
> + len = simple_strtoul(slash+1, NULL, 16);
Would you perhaps want to be even more precise and verify that
nothing follows this number?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |