summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2014-03-11 11:22:07 +0100
committerKarel Zak2014-03-11 11:22:07 +0100
commit873e7a59d7be7db56573eef271d23867e3dfa47b (patch)
tree290719f5357edc424b93a4711b05fd65fe2193c8
parentlib/colors: support <name>.enable too (diff)
downloadkernel-qcow2-util-linux-873e7a59d7be7db56573eef271d23867e3dfa47b.tar.gz
kernel-qcow2-util-linux-873e7a59d7be7db56573eef271d23867e3dfa47b.tar.xz
kernel-qcow2-util-linux-873e7a59d7be7db56573eef271d23867e3dfa47b.zip
ipcs: fix size_t overflow
Addresses: https://github.com/karelzak/util-linux/issues/51 Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r--sys-utils/ipcs.c2
-rw-r--r--sys-utils/ipcutils.c8
-rw-r--r--sys-utils/ipcutils.h3
3 files changed, 7 insertions, 6 deletions
diff --git a/sys-utils/ipcs.c b/sys-utils/ipcs.c
index 16e520649..90d6e0e99 100644
--- a/sys-utils/ipcs.c
+++ b/sys-utils/ipcs.c
@@ -201,7 +201,7 @@ static void do_shm (char format, int unit)
_("max seg size"), lim.shmmax, "\n", 0);
ipc_print_size(unit == IPC_UNIT_DEFAULT ? IPC_UNIT_KB : unit,
_("max total shared memory"),
- lim.shmall * getpagesize(), "\n", 0);
+ (uint64_t) lim.shmall * getpagesize(), "\n", 0);
ipc_print_size(unit == IPC_UNIT_DEFAULT ? IPC_UNIT_BYTES : unit,
_("min seg size"), lim.shmmin, "\n", 0);
return;
diff --git a/sys-utils/ipcutils.c b/sys-utils/ipcutils.c
index 62d742845..9ca986e1c 100644
--- a/sys-utils/ipcutils.c
+++ b/sys-utils/ipcutils.c
@@ -508,10 +508,10 @@ void ipc_print_perms(FILE *f, struct ipc_stat *is)
fprintf(f, " %-10u\n", is->gid);
}
-void ipc_print_size(int unit, char *msg, size_t size, const char *end,
+void ipc_print_size(int unit, char *msg, uint64_t size, const char *end,
int width)
{
- char format[16];
+ char format[32];
if (!msg)
/* NULL */ ;
@@ -527,11 +527,11 @@ void ipc_print_size(int unit, char *msg, size_t size, const char *end,
switch (unit) {
case IPC_UNIT_DEFAULT:
case IPC_UNIT_BYTES:
- sprintf(format, "%%%dzu", width);
+ sprintf(format, "%%%dju", width);
printf(format, size);
break;
case IPC_UNIT_KB:
- sprintf(format, "%%%dzu", width);
+ sprintf(format, "%%%dju", width);
printf(format, size / 1024);
break;
case IPC_UNIT_HUMAN:
diff --git a/sys-utils/ipcutils.h b/sys-utils/ipcutils.h
index d2e5972dd..26fbbcf4d 100644
--- a/sys-utils/ipcutils.h
+++ b/sys-utils/ipcutils.h
@@ -12,6 +12,7 @@
#include <unistd.h>
#include <grp.h>
#include <pwd.h>
+#include <stdint.h>
/*
* SHM_DEST and SHM_LOCKED are defined in kernel headers, but inside
@@ -118,7 +119,7 @@ struct ipc_stat {
};
extern void ipc_print_perms(FILE *f, struct ipc_stat *is);
-extern void ipc_print_size(int unit, char *msg, size_t size, const char *end, int width);
+extern void ipc_print_size(int unit, char *msg, uint64_t size, const char *end, int width);
/* See 'struct shmid_kernel' in kernel sources
*/