Merge branch 'maybe-for-v2.32' of https://github.com/rudimeier/util-linux
diff --git a/disk-utils/fsck.c b/disk-utils/fsck.c
index 58fd8ac..354f130 100644
--- a/disk-utils/fsck.c
+++ b/disk-utils/fsck.c
@@ -544,20 +544,22 @@
 {
 	char *s;
 	const char *tpl;
-	static char prog[256];
+	static char *prog = NULL;
 	char *p = xstrdup(fsck_path);
 
 	/* Are we looking for a program or just a type? */
 	tpl = (strncmp(type, "fsck.", 5) ? "%s/fsck.%s" : "%s/%s");
 
 	for(s = strtok(p, ":"); s; s = strtok(NULL, ":")) {
-		sprintf(prog, tpl, s, type);
+		xasprintf(&prog, tpl, s, type);
 		if (access(prog, X_OK) == 0)
 			break;
+		free(prog);
+		prog = NULL;
 	}
-	free(p);
 
-	return(s ? prog : NULL);
+	free(p);
+	return prog;
 }
 
 static int progress_active(void)
@@ -885,7 +887,7 @@
  */
 static int fsck_device(struct libmnt_fs *fs, int interactive)
 {
-	char progname[80], *progpath;
+	char *progname, *progpath;
 	const char *type;
 	int retval;
 
@@ -902,9 +904,10 @@
 	else
 		type = DEFAULT_FSTYPE;
 
-	sprintf(progname, "fsck.%s", type);
+	xasprintf(&progname, "fsck.%s", type);
 	progpath = find_fsck(progname);
 	if (progpath == NULL) {
+		free(progname);
 		if (fs_check_required(type)) {
 			retval = ENOENT;
 			goto err;
@@ -914,6 +917,8 @@
 
 	num_running++;
 	retval = execute(progname, progpath, type, fs, interactive);
+	free(progname);
+	free(progpath);
 	if (retval) {
 		num_running--;
 		goto err;
diff --git a/libsmartcols/src/table_print.c b/libsmartcols/src/table_print.c
index 5606d23..67e5107 100644
--- a/libsmartcols/src/table_print.c
+++ b/libsmartcols/src/table_print.c
@@ -387,6 +387,8 @@
 
 	if (!cl->pending_data)
 		return 0;
+	if (!width)
+		return -EINVAL;
 
 	DBG(COL, ul_debugobj(cl, "printing pending data"));
 
@@ -405,7 +407,8 @@
 	if (bytes == (size_t) -1)
 		goto err;
 
-	step_pending_data(cl, bytes);
+	if (bytes)
+		step_pending_data(cl, bytes);
 
 	if (color)
 		fputs(color, tb->out);
@@ -1065,6 +1068,8 @@
 			size_t len = mbs_safe_width(scols_cell_get_data(&cl->header));
 			cl->width_min = max(cl->width_min, len);
 		}
+		if (!cl->width_min)
+			cl->width_min = 1;
 	}
 
 	scols_reset_iter(&itr, SCOLS_ITER_FORWARD);
@@ -1341,6 +1346,10 @@
 				width--;
 				break;
 			}
+
+			/* hide zero width columns */
+			if (cl->width == 0)
+				cl->flags |= SCOLS_FL_HIDDEN;
 		}
 
 		/* the current stage is without effect, go to the next */
diff --git a/sys-utils/lscpu-arm.c b/sys-utils/lscpu-arm.c
index cc3514a..f3a746a 100644
--- a/sys-utils/lscpu-arm.c
+++ b/sys-utils/lscpu-arm.c
@@ -77,6 +77,8 @@
 };
 
 static const struct id_part brcm_part[] = {
+    { 0x0f, "Brahma B15" },
+    { 0x100, "Brahma B53" },
     { 0x516, "ThunderX2" },
     { -1, "unknown" },
 };
@@ -119,7 +121,6 @@
 static const struct id_part samsung_part[] = {
     { 0x001, "exynos-m1" },
     { -1, "unknown" },
-
 };
 
 static const struct id_part nvidia_part[] = {
@@ -133,7 +134,12 @@
     { 0x581, "PJ4/PJ4b" },
     { 0x584, "PJ4B-MP" },
     { -1, "unknown" },
+};
 
+static const struct id_part faraday_part[] = {
+    { 0x526, "FA526" },
+    { 0x626, "FA626" },
+    { -1, "unknown" },
 };
 
 static const struct id_part intel_part[] = {
@@ -181,6 +187,7 @@
     { 0x51, qcom_part,    "Qualcomm" },
     { 0x53, samsung_part, "Samsung" },
     { 0x56, marvell_part, "Marvell" },
+    { 0x66, faraday_part, "Faraday" },
     { 0x69, intel_part,   "Intel" },
     { -1,   unknown_part, "unknown" },
 };