[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2] livepatch: account for patch offset when applying NOP patch
- To: Jan Beulich <jbeulich@xxxxxxxx>
- From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
- Date: Wed, 30 Mar 2022 19:04:27 +0200
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=cjtcuDj2cXDN06yUqLIzdyypTFAjFHr+RxlqXMdHt8c=; b=R1PfB0ClsBnEKqn/d442qBtZk0zdG3tgLxJ20jSwCIhArfXufzDAyL7l8EYimt6yy9PFD8tc5qrGXl380XT87qRwRW3lROxNOmzDDhLM0TCN7jolLJdt8nVvxIXrevl/STu7ODaQ4fXHvpO7KsKYgGiJPE19KghlMGmqxprmH8u35f6oed8mEYs6+r/yKbW9njn52+3dtsQ07TWV1HbW6lwa/kIrZ71DDqfTxG0osn3W9V38tIhF0qJEZ/DDw7ctSnFvk3z0Lv89s3ylMg6lS3jEH4IInqsqEUHTPeEFpG3m2rsSpDSDURFauxf4+1k5VUzVzqeBGayC6ps2Gnb5xA==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fsotklWcX/Tb8UtMzwYOpEz9m4eYF2CkB8537nr7BNg06xpGWAbMwtTWirG/nIlixUqOGXFmrtQQ4uM5Kp7R5Mq8yhBQYhogaAInuZBMKLVXAU26WmqaVABFxyZVVHcv755CeYXQrFPBZi7klqETzQVyeef0BEkht/aJME27Tf4sSkhfxSEr7nOcqtOmGLtall+lfi/ttwlJen3EKzt4vYKGDdWECPnGsnymPwGOJqaE/WII9SueUA6fwRkgdRdPK9R2SBRCxlF0txkwDoxl2Z+ctXJK0SPRd7tz5qwDbd2B7HW7whVO5EX9EEyHLYUtCPlpvsNsdvD+IriIA6RVlQ==
- Authentication-results: esa5.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
- Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>, Konrad Wilk <konrad.wilk@xxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Bjoern Doebel <doebel@xxxxxxxxx>
- Delivery-date: Wed, 30 Mar 2022 17:04:49 +0000
- Ironport-data: A9a23:CX9HN6P2mlUTaxvvrR2bl8FynXyQoLVcMsEvi/4bfWQNrUp2gzNUn DcfDziEaauCMzSkKNx1b4S0/B5SuJfXmtc3GQto+SlhQUwRpJueD7x1DKtR0wB+jCHnZBg6h ynLQoCYdKjYdleF+lH1dOKJQUBUjclkfJKlYAL/En03FFcMpBsJ00o5wbZi2dYw3bBVPivW0 T/Mi5yHULOa82Yc3lI8s8pvfzs24ZweEBtB1rAPTagjUG32zhH5P7pGTU2FFFPqQ5E8IwKPb 72rIIdVXI/u10xF5tuNyt4Xe6CRK1LYFVDmZnF+A8BOjvXez8CbP2lS2Pc0MC9qZzu1c99Zl 5J3ksyBFR4QOrzFs9leU0UILAsiMvgTkFPHCSDXXc27ykTHdz3nwul0DVFwNoodkgp1KTgQr 7pCcmlLN03dwbLtqF64YrAEasALNs7kMZlZonh95TrYEewnUdbIRKCiCdpwgmho35oQQKy2i 8wxMTp0MD2QOw9zGnhHGLUUzeaEmUjxSmgNwL6SjfVuuDWCpOBr65DyNPLFd9rMQt9a9m6Uo W/M8mDRCxQTJtuZjzaImlqvgenVlC+9R4MWF5W/7PdhhFDVzWsWYDUUX1ampfiyimalRslSb UcT/0IGvaU0sUCmUNT5dxm5u2Kf+A4RXcJKFO834x3LzbDbizt1HUBdEGQHMoZ/8pZrG3p6j Tdlgu8FGxQw94eyGUPB746QvDqZBGsVcT89T3MLGF5tD8bYnKk/iRfGT9BGGaGzj8HoFTyY/ w1mvBTSlJ1I05dVivzTEUTvxmv1+8OXFlJdChD/BDrN0+9vWGKyi2VEA3D/5O0IEouWR0LpU JMsy5nHt7Bm4X1geUWwrAQx8FOBuq7t3N702wcH83wdG9KFoSTLkWd4umwWGauRGpxYEQIFm WeK0e+r2LddPWGxcYh8aJ+rBsIhwMDITIq5Bq2ENIMUOsIpKGdrGR2Cg2bKhQgBd2B2zMkC1 WqzK57wXR7294w5pNZJewvt+eBynX1vrY8ibZv60w6mwdKjiI29Et843K+1Rrlhtsus+VyNm /4Gbpfi40gPAYXWP3iMmaZOfA9iEJTOLc2vwyChXrXYeVQO9aBII6K5/I7NjKQ4xvwMzb2Zp yvVt40x4AOXuEAr4D6iMxhLQLjuQYx+vTQ8OyktNkyvwH8tfcCk66J3Snf9VeZPGDBLpRKsc 8Q4Rg==
- Ironport-hdrordr: A9a23:rabi2aphhE/uqn6l2TORaZAaV5vHL9V00zEX/kB9WHVpm5Oj+P xGzc526farslsssREb+OxpOMG7MBThHLpOkPMs1NaZLXLbUQ6TQr2KgrGSoQEIdxeOk9K1kJ 0QDpSWa+eAc2SS7/yKmTVQeuxIqLLskNHKuQ6d9QYUcegDUdAe0+4TMHf8LqQZfngjOXJvf6 Dsmvav6gDQMEg/X4CePD0oTuLDr9rEmNbPZgMHPQcu7E2rgSmz4LD3PhCE1lNGOgk/iosKwC zgqUjU96+ju/a0xlv10HLS1Y1fnJ/ExsFYDMKBp8AJInHHixquZq5mR7qe1QpF6N2H2RIPqp 3hsh0gN8N85zf4eXy0mwLk303a3DMn+xbZuCulqEqmhfa8aCMxCsJHi44cWADe8VAcsNZ117 8O936FtrJMZCmw0BjV1pztbVVHh0C0qX0tnao4lHpES7YTb7dXsMg24F5VKpEdByj3gbpXXd WGNPusqsq+TGnqLkww5gJUsZyRtzUIb127q3E5y4OoO2M8pgE786MarPZv60vouqhNCaWs3N 60QpiApIs+P/P+UpgNd9vpYfHHfVAlEii8Rl57HzzcZdM60jT22tvK3Ik=
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On Wed, Mar 30, 2022 at 01:05:31PM +0200, Jan Beulich wrote:
> While not triggered by the trivial xen_nop in-tree patch on
> staging/master, that patch exposes a problem on the stable trees, where
> all functions have ENDBR inserted. When NOP-ing out a range, we need to
> account for this. Handle this right in livepatch_insn_len().
>
> This requires livepatch_insn_len() to be called _after_ ->patch_offset
> was set. Note however that the earlier call cannot be deleted. In fact
> its result should have been used to guard the is_endbr64() /
> is_endbr64_poison() invocations - add the missing check now. While
> making that adjustment, also use the local variable "old_ptr"
> consistently.
>
> Fixes: 6974c75180f1 ("xen/x86: Livepatch: support patching CET-enhanced
> functions")
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> ---
> v2: Re-issue livepatch_insn_len(). Fix buffer overrun.
> ---
> Only build tested, as I don't have a live patching environment available.
>
> For Arm this assumes that the patch_offset field starts out as zero; I
> think we can make such an assumption, yet otoh on x86 explicit
> initialization was added by the cited commit.
>
> Note that the other use of is_endbr64() / is_endbr64_poison() in
> arch_livepatch_verify_func() would need the extra check only for
> cosmetic reasons, because ARCH_PATCH_INSN_SIZE > ENDBR64_LEN (5 > 4).
> Hence I'm not altering the code there.
>
> --- a/xen/arch/x86/livepatch.c
> +++ b/xen/arch/x86/livepatch.c
> @@ -157,9 +157,15 @@ void noinline arch_livepatch_apply(struc
> * loaded hotpatch (to avoid racing against other fixups adding/removing
> * ENDBR64 or similar instructions).
> */
> - if ( is_endbr64(old_ptr) || is_endbr64_poison(func->old_addr) )
> + if ( len >= ENDBR64_LEN &&
Sorry, didn't realize before, but shouldn't this check be using
old_size instead of len (which is based on new_size)?
Thanks, Roger.
|