Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp135484pxb; Wed, 11 Nov 2020 22:51:21 -0800 (PST) X-Google-Smtp-Source: ABdhPJwzeDEV8SHVoRiZ6P1VG08cVYIw+C1K4OxbTLOqkfgF/HgVSwcpRi6ra1YeNSoWuc9FksAD X-Received: by 2002:a05:6402:716:: with SMTP id w22mr3660763edx.214.1605163881454; Wed, 11 Nov 2020 22:51:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605163881; cv=none; d=google.com; s=arc-20160816; b=0Rd5WVuig820cXS8C8M8tHB4GmSGU5cY14Id19duTEDhdamZDBAJLDib4YgHEwWCM1 g7x1qaKzp2108P6w6jASIE4VPr479VElbGV7+ZSCzoazBSEinOxmNfMBzafN2Mn97Xi2 f1wZy8BFBt740fL30KF8TPAnvnEKZVq7Dg1TPMSMa3evnbQpy1VdTvXuIlKqGq9YnkAM ZhGKzZx9b1GHtql4eyi2H+HvLyBJBMMVKO44OoIxC4RQSopsHF7Dt1uOWuC4W7QV4dXd /y0xxN58r+/5AOQO+HMBxa3c0Q4QyIfSZ13tZjqeOm8ESlYSbGIsPnl2+OaG684fhhX0 IHjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=elJz3dDAcUiPe6J3cNxqFC3PIDY9/vbTziU/ycl68bk=; b=z3WITv6D04ayiDc7/1+x91SjPJyBmSzo0/kzzBtO8qdRh18Htl6BzgzaHJE1LcH8Ff z1UvYUhwVlcb8FSc5DxE1u5D69APHk9GWu6AWap0K68bZ2Xk1Ic6aJpMHoJbeRfM7Y6N E1csqWJ3aaqlwbRcMpgsIoF/6LnwsV6A+wyVRaw/qj3CC5QZ7hteGCNSCIBHt6BWzqqO POdw6xZ+wU1sBV/gQmhY3aJz+nuh24rnWZnkOS0vLmbpPpA4N5cka4CHyufdY+5KdnBM PMgT0nwYk1Jdp6KEn9YzFM58rju6/y/0fEIXVIOWvT9Xaxgn1KE5K7FLwANuc9op8yVq yFHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Gs8QDGCH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 5si3234439edo.577.2020.11.11.22.50.56; Wed, 11 Nov 2020 22:51:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=Gs8QDGCH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726048AbgKLGt3 (ORCPT + 99 others); Thu, 12 Nov 2020 01:49:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44238 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725898AbgKLGt2 (ORCPT ); Thu, 12 Nov 2020 01:49:28 -0500 Received: from mail-qk1-x730.google.com (mail-qk1-x730.google.com [IPv6:2607:f8b0:4864:20::730]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9CE42C0613D1 for ; Wed, 11 Nov 2020 22:49:28 -0800 (PST) Received: by mail-qk1-x730.google.com with SMTP id q22so4397611qkq.6 for ; Wed, 11 Nov 2020 22:49:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=elJz3dDAcUiPe6J3cNxqFC3PIDY9/vbTziU/ycl68bk=; b=Gs8QDGCHttzx94BsXmRVcBgNZdW4ivxrM9lAPkXHKFn0To/quGjg2Ad8ojJuZMw31z cF4Xa2UFYoa75EpCYw6bKtGKzkSdBCDxnlcnupyzzPJ5pv9DKGVkuD+/pdmiNOnZBy+3 wUhIqUah8luVlzKqIkDWfI1B2nqa6SV8s8ifQa2K4vwJMKkE2qC3oceEoYe9SwKBtL5e FQ5KYmym10PO5GooUH2cLxru4eGt0GeFXdbCG8xp++fryXwGwWI+209lDcXLF2kkqTh+ YsTxK3T6TaNv3rFGYwaG5Y2M7bg2/WfIS5fKwnXpksNg9czoQ3frpdS5EuhXOgOW6Xa/ n1KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=elJz3dDAcUiPe6J3cNxqFC3PIDY9/vbTziU/ycl68bk=; b=WnUkAydAbv65t6crgj51oYRDa4rU0/ClU/twu5Y8MORe/5Feje+/mrwqwk9KZ0163R T0CEYVuko2lrmZrNhpScWBcW2F+H3VSpdh6bsKZEe0KlX34yYHMrF30D293e36IufYMD lVUoJMLxJRrAVSJ2iCqC5dzUYyWs/qftQWazz4qL5bsI9Vm67D4wEPf0BnLOZvCSrTJj yu6rZ+5rertHCIiVS4ig17KvR2tcJKQ/YKtv9OSv1x31iq+2hA1+Yd9J+DemTFtSg3tf pG/twgz1cbCcpvpe2t0PyaepBdmQbuMDy+JrCsH6taWGSs7pv1BoZ3fknCwLpmDQaZS/ 1dLA== X-Gm-Message-State: AOAM533bHM50I9CgKug54eppdmTbwvtKaYv/Fg6roaBogQz5pPhy0/bl QK6EKBTwyiAPSIwD2S1kkPkboOKuoXK2KrkYx0pH7ya0bh8= X-Received: by 2002:a37:6412:: with SMTP id y18mr12228967qkb.84.1605163767754; Wed, 11 Nov 2020 22:49:27 -0800 (PST) MIME-Version: 1.0 References: <20201111183742.e7c90597216343d9d2ffcb4e@kernel.org> <20201112145055.0029e5ca5973618a6cf2d887@kernel.org> In-Reply-To: <20201112145055.0029e5ca5973618a6cf2d887@kernel.org> From: Chen Yu Date: Thu, 12 Nov 2020 14:49:16 +0800 Message-ID: Subject: Re: bootconfig length parse error in kernel To: Masami Hiramatsu Cc: Linux Kernel Mailing List , Chen Yu Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Nov 12, 2020 at 1:50 PM Masami Hiramatsu wrot= e: > > Hi Chen, > > On Thu, 12 Nov 2020 12:34:36 +0800 > Chen Yu wrote: > > > Hi Masami, > > > > On Wed, Nov 11, 2020 at 5:37 PM Masami Hiramatsu = wrote: > > > > > > Hi Chen, > > > > > > On Tue, 10 Nov 2020 23:39:53 +0800 > > > Chen Yu wrote: > > > > > > > Hi Masami, > > > > Thanks for writing bootconfig and it is useful for boot up trace ev= ent > > > > debugging. > > > > > > Thanks for testing! > > > > > > > However it was found that on 5.10-rc2 the bootconfig does not work = and it shows > > > > "'bootconfig' found on command line, but no bootconfig found" > > > > And the reason for this is the kernel found the magic number to be = incorrect. > > > > I've added some hack in kernel to dump the first 12 bytes, it shows= : > > > > "OTCONFIG". So printed more content ahead we can find > > > > "#BOOTCONFIG" ahead. So it looks that there is some alignment durin= g > > > > initrd load, and get_boot_config_from_initrd() might also deal with= it. That is > > > > to say: > > > > data =3D (char *)initrd_end - BOOTCONFIG_MAGIC_LEN; > > > > might do some alignment? > > > > > > Hrm, interesting. So initrd_end might be aligned. Could you print out= the > > > actuall address of initrd_end? > > I've done some investigation, it looks like this issue is not related > > to alignment, but related to > > the bootloader that has provided an inaccurate ramdisk size via > > boot_params.hdr.ramdisk_size. > > Yeah, it seems to happen. bootloader can pass wrong (bigger) size > to kernel. BTW, what bootloader would you use? > It is $ grub-install --version grub-install (GRUB) 2.04-1ubuntu26.2 > > The actual size of initrd is: > > ls /boot/initrd.img-5.10.0-rc3-e1000e-hw+ -l > > -rw-r--r-- 1 root root 48689230 11=E6=9C=88 12 00:08 > > /boot/initrd.img-5.10.0-rc3-e1000e-hw+ > > while the ramdisk size provided by bootloader via > > boot_params.hdr.ramdisk_size is > > 48689232, which is 2 bytes bigger than the actual size, and this is > > why the initrd_end > > is bigger than expected and causing the missmatch of magic number. > > OK. It seems that the bootloader might cut it up to 16 bytes > aligned. (But I think that's wrong behavior, there is no reason > to do it) Agree. > > > Since there is no guarantee that bootloader provides the accurate > > ramdisk size, an compromised > > proposal might be that to search for the magic number a little ahead. > > If the bootloader does such wrong behavior, there is no guarantee > that the size is "a little" bigger. IOW, it can be aligned to the > page size (4KB-) > Right. How about inserting the bootconfig at initrd_start if initrd_end could not be trusted? > > For example, the > > following patch works for me: > > diff --git a/init/main.c b/init/main.c > > index 130376ec10ba..60fb125d44f4 100644 > > --- a/init/main.c > > +++ b/init/main.c > > @@ -273,7 +273,10 @@ static void * __init > > get_boot_config_from_initrd(u32 *_size, u32 *_csum) > > if (!initrd_end) > > return NULL; > > > > - data =3D (char *)initrd_end - BOOTCONFIG_MAGIC_LEN; > > + data =3D memchr((char *)initrd_end - 2 * BOOTCONFIG_MAGIC_LEN, > > + '#', BOOTCONFIG_MAGIC_LEN); > > + if (!data) > > + return NULL; > > So this also does not guarantee that we can find "#" in BOOTCONFIG_MAGIC_= LEN. > We need to find actual code in the bootloader, what it does. > Indeed. > > if (memcmp(data, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN)) > > return NULL; > > > > > > > And could you tell me which platform are you tested? > > > > > It is HP ZHAN 99 Mobile Workstation G1 with i5-8300H, Ubuntu 20.04. > > Hmm, this means x86 Grub2 does this change. Let me check it. > Okay. Thanks, Chenyu > Thank you, > > > -- > Masami Hiramatsu