summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Levon <john.levon@joyent.com>2020-03-19 07:52:05 -0700
committerJohn Levon <john.levon@joyent.com>2020-03-23 09:07:34 -0700
commitc61137df0ddfe2318cd4b953495b4ccdb8f12b61 (patch)
tree5ae25c5ddaac3a6c0a1a3bfb946537454b8289e4
parent2a9992ecc0392fdbbaa57613c1bcfc31b6c7e247 (diff)
downloadillumos-joyent-c61137df0ddfe2318cd4b953495b4ccdb8f12b61.tar.gz
12399 kobj printf functions should be checked
Reviewed by: Robert Mustacchi <rm@fingolfin.org> Approved by: Dan McDonald <danmcd@joyent.com>
-rw-r--r--usr/src/uts/common/krtld/kobj.c30
-rw-r--r--usr/src/uts/common/krtld/reloc.h4
-rw-r--r--usr/src/uts/common/sys/kobj_impl.h7
-rw-r--r--usr/src/uts/intel/amd64/krtld/kobj_reloc.c12
4 files changed, 30 insertions, 23 deletions
diff --git a/usr/src/uts/common/krtld/kobj.c b/usr/src/uts/common/krtld/kobj.c
index 8f2b885149..0e03425c8b 100644
--- a/usr/src/uts/common/krtld/kobj.c
+++ b/usr/src/uts/common/krtld/kobj.c
@@ -305,8 +305,8 @@ int use_iflush; /* iflush after relocations */
* through this function pointer cannot handle more that one conversion
* specification in the format string.
*/
-void (*_kobj_printf)(void *, const char *, ...); /* printf routine */
-void (*_vkobj_printf)(void *, const char *, va_list); /* vprintf routine */
+void (*_kobj_printf)(void *, const char *, ...) __KPRINTFLIKE(2);
+void (*_vkobj_printf)(void *, const char *, va_list) __KVPRINTFLIKE(2);
/*
* Standalone function pointers for use within krtld.
@@ -511,7 +511,7 @@ kobj_init(
#ifdef KOBJ_DEBUG
if (kobj_debug & D_DEBUG)
_kobj_printf(ops,
- "krtld: transferring control to: 0x%p\n", entry);
+ "krtld: transferring control to: 0x%lx\n", entry);
#endif
/*
@@ -532,7 +532,7 @@ kobj_init(
#ifdef KOBJ_DEBUG
if (kobj_debug & D_DEBUG)
_kobj_printf(ops,
- "krtld: really transferring control to: 0x%p\n", entry);
+ "krtld: really transferring control to: 0x%lx\n", entry);
#endif
/* restore printf/bcopy/bzero vectors before returning */
@@ -857,9 +857,9 @@ load_exec(val_t *bootaux, char *filename)
if (kobj_debug & D_LOADING) {
_kobj_printf(ops, "krtld: file=%s\n", mp->filename);
_kobj_printf(ops, "\ttext: 0x%p", mp->text);
- _kobj_printf(ops, " size: 0x%x\n", mp->text_size);
+ _kobj_printf(ops, " size: 0x%lx\n", mp->text_size);
_kobj_printf(ops, "\tdata: 0x%p", mp->data);
- _kobj_printf(ops, " dsize: 0x%x\n", mp->data_size);
+ _kobj_printf(ops, " dsize: 0x%lx\n", mp->data_size);
}
#endif /* KOBJ_DEBUG */
@@ -968,9 +968,9 @@ load_linker(val_t *bootaux)
if (kobj_debug & D_LOADING) {
_kobj_printf(ops, "krtld: file=%s\n", mp->filename);
_kobj_printf(ops, "\ttext:0x%p", mp->text);
- _kobj_printf(ops, " size: 0x%x\n", mp->text_size);
+ _kobj_printf(ops, " size: 0x%lx\n", mp->text_size);
_kobj_printf(ops, "\tdata:0x%p", mp->data);
- _kobj_printf(ops, " dsize: 0x%x\n", mp->data_size);
+ _kobj_printf(ops, " dsize: 0x%lx\n", mp->data_size);
}
#endif /* KOBJ_DEBUG */
@@ -2010,9 +2010,9 @@ kobj_load_module(struct modctl *modp, int use_path)
if (kobj_debug & D_LOADING) {
_kobj_printf(ops, "krtld: file=%s\n", mp->filename);
_kobj_printf(ops, "\ttext:0x%p", mp->text);
- _kobj_printf(ops, " size: 0x%x\n", mp->text_size);
+ _kobj_printf(ops, " size: 0x%lx\n", mp->text_size);
_kobj_printf(ops, "\tdata:0x%p", mp->data);
- _kobj_printf(ops, " dsize: 0x%x\n", mp->data_size);
+ _kobj_printf(ops, " dsize: 0x%lx\n", mp->data_size);
}
#endif /* KOBJ_DEBUG */
@@ -2714,8 +2714,8 @@ crypto_es_hash(struct module *mp, char *hash, char *shstrtab)
if (kobj_debug & D_DEBUG)
_kobj_printf(ops,
"krtld: crypto_es_hash: updating hash with"
- " %s data size=%d\n", shstrtab + shp->sh_name,
- shp->sh_size);
+ " %s data size=%lx\n", shstrtab + shp->sh_name,
+ (size_t)shp->sh_size);
#endif
ASSERT(shp->sh_addr != 0);
SHA1Update(&ctx, (const uint8_t *)shp->sh_addr, shp->sh_size);
@@ -2868,7 +2868,7 @@ do_dependents(struct modctl *modp, char *modname, size_t modnamelen)
_kobj_printf(ops, "%s: dependency ", modp->mod_modname);
_kobj_printf(ops, "'%s' too long ", dep);
- _kobj_printf(ops, "(max %d chars)\n", modnamelen);
+ _kobj_printf(ops, "(max %d chars)\n", (int)modnamelen);
kobj_free(dep, p - d + 1);
@@ -3820,7 +3820,7 @@ kobj_read_file(struct _buf *file, char *buf, uint_t size, uint_t off)
if (_moddebug & MODDEBUG_ERRMSG) {
_kobj_printf(ops, "kobj_read_file: size=%x,", size);
_kobj_printf(ops, " offset=%x at", off);
- _kobj_printf(ops, " buf=%x\n", buf);
+ _kobj_printf(ops, " buf=%lx\n", (uintptr_t)buf);
}
/*
@@ -3863,7 +3863,7 @@ kobj_read_file(struct _buf *file, char *buf, uint_t size, uint_t off)
if (dlen != size) {
_kobj_printf(ops, "kobj_read_file: z_uncompress "
- "failed to uncompress (size returned 0x%x , "
+ "failed to uncompress (size returned 0x%lx , "
"expected size: 0x%x)\n", dlen, size);
return (-1);
}
diff --git a/usr/src/uts/common/krtld/reloc.h b/usr/src/uts/common/krtld/reloc.h
index b7ae5a8997..4f0c576203 100644
--- a/usr/src/uts/common/krtld/reloc.h
+++ b/usr/src/uts/common/krtld/reloc.h
@@ -21,6 +21,8 @@
/*
* Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
+ *
+ * Copyright 2020 Joyent, Inc.
*/
#ifndef _RELOC_DOT_H
@@ -274,7 +276,7 @@ extern const char *conv_reloc_SPARC_type(Word);
_kobj_printf(ops, MSG_REL_PREGEN, CONV_RELOC_TYPE((rtype))); \
_kobj_printf(ops, MSG_REL_FILE, (file)); \
_kobj_printf(ops, MSG_REL_SYM, ((sym) ? (sym) : MSG_STR_UNKNOWN)); \
- _kobj_printf(ops, MSG_REL_NOFIT, EC_XWORD((uvalue)))
+ _kobj_printf(ops, MSG_REL_NOFIT, (u_longlong_t)EC_XWORD((uvalue)))
#else /* !_KERNEL */
diff --git a/usr/src/uts/common/sys/kobj_impl.h b/usr/src/uts/common/sys/kobj_impl.h
index a8488365b9..752217b5cf 100644
--- a/usr/src/uts/common/sys/kobj_impl.h
+++ b/usr/src/uts/common/sys/kobj_impl.h
@@ -21,6 +21,8 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2020 Joyent, Inc.
*/
/*
@@ -184,8 +186,9 @@ extern void mach_modpath(char *, const char *);
extern void kobj_setup_standalone_vectors(void);
extern void kobj_restore_vectors(void);
-extern void (*_kobj_printf)(void *, const char *fmt, ...);
-extern void (*_vkobj_printf)(void *, const char *fmt, va_list);
+extern void (*_kobj_printf)(void *, const char *fmt, ...) __KPRINTFLIKE(2);
+extern void (*_vkobj_printf)(void *, const char *fmt, va_list)
+ __KVPRINTFLIKE(2);
extern void (*kobj_bcopy)(const void *, void *, size_t);
extern void (*kobj_bzero)(void *, size_t);
extern size_t (*kobj_strlcat)(char *, const char *, size_t);
diff --git a/usr/src/uts/intel/amd64/krtld/kobj_reloc.c b/usr/src/uts/intel/amd64/krtld/kobj_reloc.c
index 401f13a33a..b75e1300e1 100644
--- a/usr/src/uts/intel/amd64/krtld/kobj_reloc.c
+++ b/usr/src/uts/intel/amd64/krtld/kobj_reloc.c
@@ -22,6 +22,8 @@
/*
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2020 Joyent, Inc.
*/
/*
@@ -158,7 +160,7 @@ do_relocate(struct module *mp, char *reltbl, int nreloc, int relocsize,
if ((rtype > R_AMD64_NUM) || IS_TLS_INS(rtype)) {
_kobj_printf(ops, "krtld: invalid relocation type %d",
rtype);
- _kobj_printf(ops, " at 0x%llx:", off);
+ _kobj_printf(ops, " at 0x%lx:", off);
_kobj_printf(ops, " file=%s\n", mp->filename);
err = 1;
continue;
@@ -179,8 +181,8 @@ do_relocate(struct module *mp, char *reltbl, int nreloc, int relocsize,
(mp->symtbl+(stndx * mp->symhdr->sh_entsize));
_kobj_printf(ops, "krtld:\t%s",
conv_reloc_amd64_type(rtype));
- _kobj_printf(ops, "\t0x%8llx", off);
- _kobj_printf(ops, " 0x%8llx", addend);
+ _kobj_printf(ops, "\t0x%8lx", off);
+ _kobj_printf(ops, " %8lld", (longlong_t)addend);
_kobj_printf(ops, " %s\n",
(const char *)mp->strings + symp->st_name);
}
@@ -254,8 +256,8 @@ do_relocate(struct module *mp, char *reltbl, int nreloc, int relocsize,
#ifdef KOBJ_DEBUG
if (kobj_debug & D_RELOCATIONS) {
- _kobj_printf(ops, "krtld:\t\t\t\t0x%8llx", off);
- _kobj_printf(ops, " 0x%8llx\n", value);
+ _kobj_printf(ops, "krtld:\t\t\t\t0x%8lx", off);
+ _kobj_printf(ops, " 0x%8lx\n", value);
}
#endif