]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemd: Fix busctl crash on aarch64 when setting output table format
authorAlin Popa <alin.popa@bmw.de>
Fri, 14 Feb 2020 08:33:43 +0000 (09:33 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 15 Feb 2020 17:09:26 +0000 (02:09 +0900)
The enum used for column names is integer type while table_set_display() is parsing
arguments on size_t alignment which may result in assert in table_set_display() if
the size between types missmatch. This patch cast the enums to size_t.
It also fixes all other occurences for table_set_display() and
table_set_sort().

src/analyze/analyze-security.c
src/analyze/analyze.c
src/busctl/busctl.c
src/mount/mount-tool.c
src/network/networkctl.c
src/partition/repart.c
src/systemctl/systemctl.c
src/userdb/userdbctl.c

index ee782e5689ffec04ce11439729451747f1142804..d681251c0460ed669a1e9fab14cbc5a76bd31e71 100644 (file)
@@ -1458,11 +1458,11 @@ static int assess(const struct security_info *info, Table *overview_table, Analy
                 if (!details_table)
                         return log_oom();
 
-                (void) table_set_sort(details_table, 3, 1, (size_t) -1);
+                (void) table_set_sort(details_table, (size_t) 3, (size_t) 1, (size_t) -1);
                 (void) table_set_reverse(details_table, 3, true);
 
                 if (getenv_bool("SYSTEMD_ANALYZE_DEBUG") <= 0)
-                        (void) table_set_display(details_table, 0, 1, 2, 6, (size_t) -1);
+                        (void) table_set_display(details_table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 6, (size_t) -1);
         }
 
         for (i = 0; i < ELEMENTSOF(security_assessor_table); i++) {
index 50f4573eb83ba202158ad1a6ea0d47a92e36277c..217e7e1a96753d65610ee4def7770c26785f7ac5 100644 (file)
@@ -1101,7 +1101,7 @@ static int analyze_blame(int argc, char *argv[], void *userdata) {
         if (r < 0)
                 return r;
 
-        r = table_set_sort(table, 0, SIZE_MAX);
+        r = table_set_sort(table, (size_t) 0, (size_t) SIZE_MAX);
         if (r < 0)
                 return r;
 
index b4e133ff957eb5c6b06373a9767ae25fdd5392d7..3c75be381fc6c9bf2cfb8c20b84df416390cf76b 100644 (file)
@@ -207,7 +207,7 @@ static int list_bus_names(int argc, char **argv, void *userdata) {
         if (r < 0)
                 return log_error_errno(r, "Failed to set empty string: %m");
 
-        r = table_set_sort(table, COLUMN_NAME, (size_t) -1);
+        r = table_set_sort(table, (size_t) COLUMN_NAME, (size_t) -1);
         if (r < 0)
                 return log_error_errno(r, "Failed to set sort column: %m");
 
index 77d9cbb452d2eaa76170400b4569454632246ae7..982e0a285e386e97b1a539413ba335e55001253f 100644 (file)
@@ -1403,7 +1403,7 @@ static int list_devices(void) {
         if (arg_full)
                 table_set_width(table, 0);
 
-        r = table_set_sort(table, 0, SIZE_MAX);
+        r = table_set_sort(table, (size_t) 0, (size_t) SIZE_MAX);
         if (r < 0)
                 return log_error_errno(r, "Failed to set sort index: %m");
 
index a470488664b6bb4316647a2f05e4c2d96cc67b61..078cf1f0cf4477e9197560cb505260c329833c4f 100644 (file)
@@ -879,7 +879,7 @@ static int dump_address_labels(sd_netlink *rtnl) {
         if (arg_full)
                 table_set_width(table, 0);
 
-        r = table_set_sort(table, 0, SIZE_MAX);
+        r = table_set_sort(table, (size_t) 0, (size_t) SIZE_MAX);
         if (r < 0)
                 return r;
 
index 0e5dadaf60183e2b4656ab8cb31245abae04cfae..3e52f26a1dc8950039006ecfb8a1ee1948c801ea 100644 (file)
@@ -1555,7 +1555,7 @@ static int context_dump_partitions(Context *context, const char *node) {
                 return log_oom();
 
         if (!DEBUG_LOGGING)
-                (void) table_set_display(t, 0, 1, 2, 3, 4, 7, 9, (size_t) -1);
+                (void) table_set_display(t, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4, (size_t) 7, (size_t) 9, (size_t) -1);
 
         (void) table_set_align_percent(t, table_get_cell(t, 0, 4), 100);
         (void) table_set_align_percent(t, table_get_cell(t, 0, 5), 100);
index 37febfa104e11fe365ffc040603f842be5955b0d..771ede7397e316d28a1603d83c45200f2862ff83 100644 (file)
@@ -991,7 +991,7 @@ static int output_sockets_list(struct socket_info *socket_infos, unsigned cs) {
 
         if (!arg_show_types) {
                 /* Hide the second (TYPE) column */
-                r = table_set_display(table, 0, 2, 3, (size_t) -1);
+                r = table_set_display(table, (size_t) 0, (size_t) 2, (size_t) 3, (size_t) -1);
                 if (r < 0)
                         return log_error_errno(r, "Failed to set columns to display: %m");
         }
index 9083797856e886e4e70505cc40a80e5a2f200ac1..f085eb232caade567bd1a1c386de33929c950631 100644 (file)
@@ -112,8 +112,8 @@ static int display_user(int argc, char *argv[], void *userdata) {
                 (void) table_set_align_percent(table, table_get_cell(table, 0, 2), 100);
                 (void) table_set_align_percent(table, table_get_cell(table, 0, 3), 100);
                 (void) table_set_empty_string(table, "-");
-                (void) table_set_sort(table, 7, 2, (size_t) -1);
-                (void) table_set_display(table, 0, 1, 2, 3, 4, 5, 6, (size_t) -1);
+                (void) table_set_sort(table, (size_t) 7, (size_t) 2, (size_t) -1);
+                (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4, (size_t) 5, (size_t) 6, (size_t) -1);
         }
 
         if (argc > 1) {
@@ -260,8 +260,8 @@ static int display_group(int argc, char *argv[], void *userdata) {
                         return log_oom();
 
                 (void) table_set_align_percent(table, table_get_cell(table, 0, 2), 100);
-                (void) table_set_sort(table, 3, 2, (size_t) -1);
-                (void) table_set_display(table, 0, 1, 2, (size_t) -1);
+                (void) table_set_sort(table, (size_t) 3, (size_t) 2, (size_t) -1);
+                (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) -1);
         }
 
         if (argc > 1) {
@@ -400,7 +400,7 @@ static int display_memberships(int argc, char *argv[], void *userdata) {
                 if (!table)
                         return log_oom();
 
-                (void) table_set_sort(table, 0, 1, (size_t) -1);
+                (void) table_set_sort(table, (size_t) 0, (size_t) 1, (size_t) -1);
         }
 
         if (argc > 1) {
@@ -489,7 +489,7 @@ static int display_services(int argc, char *argv[], void *userdata) {
         if (!t)
                 return log_oom();
 
-        (void) table_set_sort(t, 0, (size_t) -1);
+        (void) table_set_sort(t, (size_t) 0, (size_t) -1);
 
         FOREACH_DIRENT(de, d, return -errno) {
                 _cleanup_free_ char *j = NULL, *no = NULL;