From owner-svn-src-all@freebsd.org Thu Dec 10 13:11:52 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DACDB4A9FAD; Thu, 10 Dec 2020 13:11:52 +0000 (UTC) (envelope-from bhughes@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4CsDpJ5tzXz3wDd; Thu, 10 Dec 2020 13:11:52 +0000 (UTC) (envelope-from bhughes@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BD63918EF3; Thu, 10 Dec 2020 13:11:52 +0000 (UTC) (envelope-from bhughes@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 0BADBqE4022222; Thu, 10 Dec 2020 13:11:52 GMT (envelope-from bhughes@FreeBSD.org) Received: (from bhughes@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 0BADBqdq022221; Thu, 10 Dec 2020 13:11:52 GMT (envelope-from bhughes@FreeBSD.org) Message-Id: <202012101311.0BADBqdq022221@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bhughes set sender to bhughes@FreeBSD.org using -f From: "Bradley T. Hughes" Date: Thu, 10 Dec 2020 13:11:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r368513 - head/sys/dev/hyperv/vmbus X-SVN-Group: head X-SVN-Commit-Author: bhughes X-SVN-Commit-Paths: head/sys/dev/hyperv/vmbus X-SVN-Commit-Revision: 368513 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Dec 2020 13:11:52 -0000 Author: bhughes (ports committer) Date: Thu Dec 10 13:11:52 2020 New Revision: 368513 URL: https://svnweb.freebsd.org/changeset/base/368513 Log: hyperv/vmbus: avoid crash, panic if vbe fb info is missing Do not assume that VBE framebuffer metadata can be used. Like with the EFI fb metadata, it may be null, so we should take care not to dereference the null vbefb pointer. This avoids a panic when booting -CURRENT on a gen1 VM in Azure. Approved by: tsoome Sponsored by: Miles AS Differential Revision: https://reviews.freebsd.org/D27533 Modified: head/sys/dev/hyperv/vmbus/vmbus.c Modified: head/sys/dev/hyperv/vmbus/vmbus.c ============================================================================== --- head/sys/dev/hyperv/vmbus/vmbus.c Thu Dec 10 13:08:06 2020 (r368512) +++ head/sys/dev/hyperv/vmbus/vmbus.c Thu Dec 10 13:11:52 2020 (r368513) @@ -1361,35 +1361,33 @@ vmbus_fb_mmio_res(device_t dev) kmdp = preload_search_by_type("elf64 kernel"); efifb = (struct efi_fb *)preload_search_info(kmdp, MODINFO_METADATA | MODINFOMD_EFI_FB); - if (efifb == NULL) { - vbefb = (struct vbe_fb *)preload_search_info(kmdp, - MODINFO_METADATA | MODINFOMD_VBE_FB); + vbefb = (struct vbe_fb *)preload_search_info(kmdp, + MODINFO_METADATA | MODINFOMD_VBE_FB); + if (efifb != NULL) { + fb_start = efifb->fb_addr; + fb_end = efifb->fb_addr + efifb->fb_size; + fb_count = efifb->fb_size; + fb_height = efifb->fb_height; + fb_width = efifb->fb_width; + } else if (vbefb != NULL) { fb_start = vbefb->fb_addr; fb_end = vbefb->fb_addr + vbefb->fb_size; fb_count = vbefb->fb_size; fb_height = vbefb->fb_height; fb_width = vbefb->fb_width; } else { - fb_start = efifb->fb_addr; - fb_end = efifb->fb_addr + efifb->fb_size; - fb_count = efifb->fb_size; - fb_height = efifb->fb_height; - fb_width = efifb->fb_width; - } - - if (fb_start == 0) { if (bootverbose) device_printf(dev, "no preloaded kernel fb information\n"); /* We are on Gen1 VM, just return. */ return; - } else { - if (bootverbose) - device_printf(dev, - "fb: fb_addr: %#jx, size: %#jx, " - "actual size needed: 0x%x\n", - fb_start, fb_count, fb_height * fb_width); } + + if (bootverbose) + device_printf(dev, + "fb: fb_addr: %#jx, size: %#jx, " + "actual size needed: 0x%x\n", + fb_start, fb_count, fb_height * fb_width); hv_fb_res = pcib_host_res_alloc(&sc->vmbus_mmio_res, dev, SYS_RES_MEMORY, &rid, fb_start, fb_end, fb_count,