From edc3e298c6300f1b74648fb85999cef789ec5d90 Mon Sep 17 00:00:00 2001 From: tsutsui Date: Wed, 15 May 2024 12:47:22 +0000 Subject: [PATCH] Fix an old bug in NATIVELABEL_ONLY case in PR/50729 by me. (sigh) 'disklabel -r -w' writes a disklabel at a wrong sector in NATIVELABEL_ONLY && !LABELUSESMBR && LABELSECTOR != 0 case if the target disk doesn't have a valid disklabel, due to incorrect LABEL_OFFSET value. Found and investigated on NetBSD/hp300 bootable CD tests. Maybe this affects ports that use distrib/utils/x_disklabel but have no MBR support, i.e. only NetBSD/hp300 10.0 and NetBSD/ews4800mips 9.0 and later. Should be pulled up to netbsd-10 and netbsd-9. --- sbin/disklabel/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sbin/disklabel/main.c b/sbin/disklabel/main.c index 5f658e2c1893..02ce1324b4e7 100644 --- a/sbin/disklabel/main.c +++ b/sbin/disklabel/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.57 2021/11/03 14:25:39 nia Exp $ */ +/* $NetBSD: main.c,v 1.58 2024/05/15 12:47:22 tsutsui Exp $ */ /* * Copyright (c) 2006 The NetBSD Foundation, Inc. @@ -76,7 +76,7 @@ __COPYRIGHT("@(#) Copyright (c) 1987, 1993\ static char sccsid[] = "@(#)disklabel.c 8.4 (Berkeley) 5/4/95"; /* from static char sccsid[] = "@(#)disklabel.c 1.2 (Symmetric) 11/28/85"; */ #else -__RCSID("$NetBSD: main.c,v 1.57 2021/11/03 14:25:39 nia Exp $"); +__RCSID("$NetBSD: main.c,v 1.58 2024/05/15 12:47:22 tsutsui Exp $"); #endif #endif /* not lint */ @@ -352,7 +352,7 @@ static const struct arch_endian { #define labelsector LABELSECTOR #define labelusesmbr LABELUSESMBR #define maxpartitions MAXPARTITIONS -#define LABEL_OFFSET LABELOFFSET +#define LABEL_OFFSET (LABELSECTOR * DEV_BSIZE + LABELOFFSET) #endif /* !NATIVELABEL_ONLY */ /*