From owner-freebsd-hackers@freebsd.org Thu Jun 13 06:52:37 2019 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 014C115CDE47 for ; Thu, 13 Jun 2019 06:52:37 +0000 (UTC) (envelope-from huangfq.daxian@gmail.com) Received: from mail-yb1-xb44.google.com (mail-yb1-xb44.google.com [IPv6:2607:f8b0:4864:20::b44]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1D22B6EFB5 for ; Thu, 13 Jun 2019 06:52:36 +0000 (UTC) (envelope-from huangfq.daxian@gmail.com) Received: by mail-yb1-xb44.google.com with SMTP id p8so7381850ybo.13 for ; Wed, 12 Jun 2019 23:52:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=JLOUZSRzCZHUWSt/jzHBk0waG5P9EjuEfJM1JGLjV10=; b=flA7XmGBd44CraXSvRVnU1IIiN7rZAwkQLpzaM9nFCdrJVeyy9FJMBbvintM8DdMa4 6t7eJEUo0p9w32UnhJv1hYHpD/GXiNLoNs7pKKSvVnJ/UFkS2dZGdFE27jDRn940rxfJ J4ehSKIw7v2Tq9q3TXU0z6ysmqwWhovg+y4x6JKTwEp1pSbsnbzsY9XK7IFt8CRJpKxS OGpE+cskVdT9BdD7MeIS9kEkixSmDGiGqH2iIijD0Y1dS/rD+jM+GK2u3cdazAxy96a1 qSD0/pCWd4zyuZN0ePcArlxwXnyv6/DXk6r8aFihRdfy9K+oeRO6Lla7QCYFiRcE8Z56 lHkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=JLOUZSRzCZHUWSt/jzHBk0waG5P9EjuEfJM1JGLjV10=; b=BWFvsdnopc6x2utDKcxmIrYjgsJjQruF0QyVY+9iHxxLFOcH35C1l8NeL8gX5ak9uT BK6T6sRbMju9ROk0YCGQUbqPFQ/ZvslrerTkFdiD9xfYNOLHs6AOo0h92vmx0Y9ODL2R nBhI+HG7fIV0y4lqy4JEKjMKaxVdCtqZeHHAy+czE0wOu/q3ppAjgliawQCfYgPDHiOi /8Nlh1aAQFXGKCIL1OZ4QjHGHMV+HA9sbhpBCYhz+knsyB44HRDaeGY/MmzxTfI4QnWD I/TheaSUJkR9qjGMcskHuq53eCaHH5KZlVe1HUKsjPMmr3JfsQ/a5OCOWWzcSIlsQF2R PECw== X-Gm-Message-State: APjAAAUXsEYmlg+1HI1mxuOp7gxsHkkW7bMIGLAlZ560YDT8zZHrYbN1 VOXv/u0ZtxyAV70Dze/gK4+lqrAiZU4sWFGa0YX/IxZv X-Google-Smtp-Source: APXvYqxw72YlsgXyEIXmFd7nSH05Vwc9g7wbVzNUfb+3Lnk5lEPXDCto8UI9EfRe22KDBtMHnO/yo/eaP3bPNd52wsU= X-Received: by 2002:a5b:9c9:: with SMTP id y9mr42154268ybq.500.1560408755506; Wed, 12 Jun 2019 23:52:35 -0700 (PDT) MIME-Version: 1.0 From: Fuqian Huang Date: Thu, 13 Jun 2019 14:52:24 +0800 Message-ID: Subject: dev:md: A kernel address leakage in sys/dev/md/md.c To: freebsd-hackers@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 1D22B6EFB5 X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20161025 header.b=flA7XmGB; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of huangfqdaxian@gmail.com designates 2607:f8b0:4864:20::b44 as permitted sender) smtp.mailfrom=huangfqdaxian@gmail.com X-Spamd-Result: default: False [-3.95 / 15.00]; R_SPF_ALLOW(-0.20)[+ip6:2607:f8b0:4000::/36]; FREEMAIL_FROM(0.00)[gmail.com]; TO_DN_NONE(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; MX_GOOD(-0.01)[cached: alt3.gmail-smtp-in.l.google.com]; NEURAL_HAM_SHORT(-0.64)[-0.639,0]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; TAGGED_FROM(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com.dwl.dnswl.org : 127.0.5.0]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20161025]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; MIME_GOOD(-0.10)[text/plain]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; RCPT_COUNT_ONE(0.00)[1]; IP_SCORE(-0.30)[ip: (4.01), ipnet: 2607:f8b0::/32(-3.17), asn: 15169(-2.31), country: US(-0.06)]; RCVD_IN_DNSWL_NONE(0.00)[4.4.b.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.4.6.8.4.0.b.8.f.7.0.6.2.list.dnswl.org : 127.0.5.0]; RCVD_COUNT_TWO(0.00)[2] X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jun 2019 06:52:37 -0000 In freebsd/sys/dev/md/md.c if the kernel is created with option MD_ROOT, g_md_init will call md_preload and use mfs_root as the image. In function md_preload, address of image will be printed out, in this case, the address of image is the address of a global object mfs_root. A kernel address leakage happens. Patch suggestion: use macro like #ifdef DEBUG to wrap the printf statement. u_char mfs_root[MD_ROOT_SIZE*1024] __attribute__ ((section("oldmfs"))); static void g_md_init(struct g_class *mp __unused) { ... #ifdef MD_ROOT ... #ifdef MD_ROOT_MEM md_preload(mfs_root, mfs_root_size, NULL); #else md_preload(__DEVOLATILE(u_char *, &mfs_root), mfs_root_size, NULL); #endif ... #endif } static void md_preload(u_char *image, size_t length, const char *name) { ... if (name != NULL) { printf("%s%d: Preloaded image <%s> %zd bytes at %p\n", MD_NAME, sc->unit, name, length, image); } else { printf("%s%d: Embedded image %zd bytes at %p\n", MD_NAME, sc->unit, length, image); } }