From 28c3645518578c97984a0a935f98245f757a0bfb Mon Sep 17 00:00:00 2001 From: Mark Cavage Date: Fri, 11 Mar 2011 11:13:47 -0800 Subject: OS-308 Backport openssh -m option to ssh-keygen --- usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c | 276 +++++++++++++++++++++++++------- 1 file changed, 222 insertions(+), 54 deletions(-) (limited to 'usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c') diff --git a/usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c b/usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c index ebad79b0f8..e4b7d1e5eb 100644 --- a/usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c +++ b/usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c @@ -11,7 +11,7 @@ * called by a name other than "ssh" or "Secure Shell". */ -/* $OpenBSD: ssh-keygen.c,v 1.160 2007/01/21 01:41:54 stevesk Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.205 2011/01/11 06:13:10 djm Exp $ */ #include "includes.h" #include @@ -76,9 +76,14 @@ char *identity_new_passphrase = NULL; /* This is set to the new comment if given on the command line. */ char *identity_comment = NULL; -/* Dump public key file in format used by real and the original SSH 2 */ -int convert_to_ssh2 = 0; -int convert_from_ssh2 = 0; +/* Conversion to/from various formats */ +int convert_to = 0; +int convert_from = 0; +enum { + FMT_RFC4716, + FMT_PKCS8, + FMT_PEM +} convert_format = FMT_RFC4716; int print_public = 0; char *key_type_name = NULL; @@ -154,41 +159,105 @@ load_identity(char *filename) #define SSH_COM_PRIVATE_KEY_MAGIC 0x3f6ff9eb static void -do_convert_to_ssh2(struct passwd *pw) +do_convert_to_ssh2(struct passwd *pw, Key *k) { - Key *k; u_int len; u_char *blob; - struct stat st; + char comment[61]; - if (!have_identity) - ask_filename(pw, gettext("Enter file in which the key is")); - if (stat(identity_file, &st) < 0) { - perror(identity_file); + if (key_to_blob(k, &blob, &len) <= 0) { + fprintf(stderr, "key_to_blob failed\n"); exit(1); } + /* Comment + surrounds must fit into 72 chars (RFC 4716 sec 3.3) */ + snprintf(comment, sizeof(comment), + "%u-bit %s, converted by %s@%s from OpenSSH", + key_size(k), key_type(k), + pw->pw_name, hostname); + + fprintf(stdout, "%s\n", SSH_COM_PUBLIC_BEGIN); + fprintf(stdout, "Comment: \"%s\"\n", comment); + dump_base64(stdout, blob, len); + fprintf(stdout, "%s\n", SSH_COM_PUBLIC_END); + key_free(k); + xfree(blob); + exit(0); +} + +static void +do_convert_to_pkcs8(Key *k) +{ + switch (key_type_plain(k->type)) { + case KEY_RSA: + if (!PEM_write_RSA_PUBKEY(stdout, k->rsa)) + fatal("PEM_write_RSA_PUBKEY failed"); + break; + case KEY_DSA: + if (!PEM_write_DSA_PUBKEY(stdout, k->dsa)) + fatal("PEM_write_DSA_PUBKEY failed"); + break; + default: + fatal("%s: unsupported key type %s", __func__, key_type(k)); + } + exit(0); +} + +static void +do_convert_to_pem(Key *k) +{ + switch (key_type_plain(k->type)) { + case KEY_RSA: + if (!PEM_write_RSAPublicKey(stdout, k->rsa)) + fatal("PEM_write_RSAPublicKey failed"); + break; + case KEY_DSA: + if (!PEM_write_DSA_PUBKEY(stdout, k->dsa)) + fatal("PEM_write_DSAPublicKey failed"); + break; + default: + fatal("%s: unsupported key type %s", __func__, key_type(k)); + } + exit(0); +} + +static void +do_convert_to(struct passwd *pw) +{ + Key *k; + struct stat st; + + if (!have_identity) + ask_filename(pw, "Enter file in which the key is"); + if (stat(identity_file, &st) < 0) + fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); if ((k = key_load_public(identity_file, NULL)) == NULL) { if ((k = load_identity(identity_file)) == NULL) { - fprintf(stderr, gettext("load failed\n")); + fprintf(stderr, "load failed\n"); exit(1); } } - if (key_to_blob(k, &blob, &len) <= 0) { - fprintf(stderr, gettext("key_to_blob failed\n")); + if (k->type == KEY_RSA1) { + fprintf(stderr, "version 1 keys are not supported\n"); exit(1); } - fprintf(stdout, "%s\n", SSH_COM_PUBLIC_BEGIN); - fprintf(stdout, gettext( - "Comment: \"%u-bit %s, converted from OpenSSH by %s@%s\"\n"), - key_size(k), key_type(k), - pw->pw_name, hostname); - dump_base64(stdout, blob, len); - fprintf(stdout, "%s\n", SSH_COM_PUBLIC_END); - key_free(k); - xfree(blob); + + switch (convert_format) { + case FMT_RFC4716: + do_convert_to_ssh2(pw, k); + break; + case FMT_PKCS8: + do_convert_to_pkcs8(k); + break; + case FMT_PEM: + do_convert_to_pem(k); + break; + default: + fatal("%s: unknown key format %d", __func__, convert_format); + } exit(0); } + static void buffer_get_bignum_bits(Buffer *b, BIGNUM *value) { @@ -327,24 +396,16 @@ get_line(FILE *fp, char *line, size_t len) } static void -do_convert_from_ssh2(struct passwd *pw) +do_convert_from_ssh2(struct passwd *pw, Key **k, int *private) { - Key *k; int blen; u_int len; char line[1024]; u_char blob[8096]; char encoded[8096]; - struct stat st; - int escaped = 0, private = 0, ok; + int escaped = 0; FILE *fp; - if (!have_identity) - ask_filename(pw, gettext("Enter file in which the key is")); - if (stat(identity_file, &st) < 0) { - perror(identity_file); - exit(1); - } fp = fopen(identity_file, "r"); if (fp == NULL) { perror(identity_file); @@ -357,7 +418,7 @@ do_convert_from_ssh2(struct passwd *pw) if (strncmp(line, "----", 4) == 0 || strstr(line, ": ") != NULL) { if (strstr(line, SSH_COM_PRIVATE_BEGIN) != NULL) - private = 1; + *private = 1; if (strstr(line, " END ") != NULL) { break; } @@ -382,26 +443,117 @@ do_convert_from_ssh2(struct passwd *pw) fprintf(stderr, gettext("uudecode failed.\n")); exit(1); } - k = private ? + *k = *private ? do_convert_private_ssh2_from_blob(blob, blen) : key_from_blob(blob, blen); - if (k == NULL) { + if (*k == NULL) { fprintf(stderr, gettext("decode blob failed.\n")); exit(1); } - ok = private ? - (k->type == KEY_DSA ? - PEM_write_DSAPrivateKey(stdout, k->dsa, NULL, NULL, 0, NULL, NULL) : - PEM_write_RSAPrivateKey(stdout, k->rsa, NULL, NULL, 0, NULL, NULL)) : - key_write(k, stdout); + fclose(fp); +} + +static void +do_convert_from_pkcs8(Key **k, int *private) +{ + EVP_PKEY *pubkey; + FILE *fp; + + if ((fp = fopen(identity_file, "r")) == NULL) + fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); + if ((pubkey = PEM_read_PUBKEY(fp, NULL, NULL, NULL)) == NULL) { + fatal("%s: %s is not a recognised public key format", __func__, + identity_file); + } + fclose(fp); + switch (EVP_PKEY_type(pubkey->type)) { + case EVP_PKEY_RSA: + *k = key_new(KEY_UNSPEC); + (*k)->type = KEY_RSA; + (*k)->rsa = EVP_PKEY_get1_RSA(pubkey); + break; + case EVP_PKEY_DSA: + *k = key_new(KEY_UNSPEC); + (*k)->type = KEY_DSA; + (*k)->dsa = EVP_PKEY_get1_DSA(pubkey); + break; + default: + fatal("%s: unsupported pubkey type %d", __func__, + EVP_PKEY_type(pubkey->type)); + } + EVP_PKEY_free(pubkey); + return; +} + +static void +do_convert_from_pem(Key **k, int *private) +{ + FILE *fp; + RSA *rsa; + + if ((fp = fopen(identity_file, "r")) == NULL) + fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); + if ((rsa = PEM_read_RSAPublicKey(fp, NULL, NULL, NULL)) != NULL) { + *k = key_new(KEY_UNSPEC); + (*k)->type = KEY_RSA; + (*k)->rsa = rsa; + fclose(fp); + return; + } + fatal("%s: unrecognised raw private key format", __func__); +} + +static void +do_convert_from(struct passwd *pw) +{ + Key *k = NULL; + int private = 0, ok = 0; + struct stat st; + + if (!have_identity) + ask_filename(pw, "Enter file in which the key is"); + if (stat(identity_file, &st) < 0) + fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); + + switch (convert_format) { + case FMT_RFC4716: + do_convert_from_ssh2(pw, &k, &private); + break; + case FMT_PKCS8: + do_convert_from_pkcs8(&k, &private); + break; + case FMT_PEM: + do_convert_from_pem(&k, &private); + break; + default: + fatal("%s: unknown key format %d", __func__, convert_format); + } + + if (!private) + ok = key_write(k, stdout); + if (ok) + fprintf(stdout, "\n"); + else { + switch (k->type) { + case KEY_DSA: + ok = PEM_write_DSAPrivateKey(stdout, k->dsa, NULL, + NULL, 0, NULL, NULL); + break; + case KEY_RSA: + ok = PEM_write_RSAPrivateKey(stdout, k->rsa, NULL, + NULL, 0, NULL, NULL); + break; + default: + fatal("%s: unsupported key type %s", __func__, + key_type(k)); + } + } + if (!ok) { - fprintf(stderr, gettext("key write failed")); + fprintf(stderr, "key write failed\n"); exit(1); } key_free(k); - if (!private) - fprintf(stdout, "\n"); - fclose(fp); exit(0); } @@ -917,12 +1069,13 @@ usage(void) " -B Show bubblebabble digest of key file.\n" " -c Change comment in private and public key files.\n" " -C comment Provide new comment.\n" - " -e Convert OpenSSH to IETF SECSH key file.\n" + " -e Convert OpenSSH to foreign format key file.\n" " -f filename Filename of the key file.\n" " -F hostname Find hostname in known hosts file.\n" " -H Hash names in known_hosts file.\n" - " -i Convert IETF SECSH to OpenSSH key file.\n" + " -i Convert foreign format to OpenSSH key file.\n" " -l Show fingerprint of key file.\n" + " -m key_fmt Conversion format for -e/-i (PEM|PKCS8|RFC4716).\n" " -N phrase Provide new passphrase.\n" " -p Change passphrase of private key file.\n" " -P phrase Provide old passphrase.\n" @@ -974,7 +1127,7 @@ main(int argc, char **argv) exit(1); } -#define GETOPT_ARGS "BcdeHilpqxXyb:C:f:F:N:P:R:t:" +#define GETOPT_ARGS "BcdeHilpqxXyb:C:f:F:m:N:P:R:t:" while ((opt = getopt(argc, argv, GETOPT_ARGS)) != -1) { switch (opt) { @@ -1002,6 +1155,21 @@ main(int argc, char **argv) case 'B': print_bubblebabble = 1; break; + case 'm': + if (strcasecmp(optarg, "RFC4716") == 0 || + strcasecmp(optarg, "ssh2") == 0) { + convert_format = FMT_RFC4716; + break; + } + if (strcasecmp(optarg, "PKCS8") == 0) { + convert_format = FMT_PKCS8; + break; + } + if (strcasecmp(optarg, "PEM") == 0) { + convert_format = FMT_PEM; + break; + } + fatal("Unsupported conversion format \"%s\"", optarg); case 'p': change_passphrase = 1; break; @@ -1027,12 +1195,12 @@ main(int argc, char **argv) case 'e': case 'x': /* export key */ - convert_to_ssh2 = 1; + convert_to = 1; break; case 'i': case 'X': /* import key */ - convert_from_ssh2 = 1; + convert_from = 1; break; case 'y': print_public = 1; @@ -1064,10 +1232,10 @@ main(int argc, char **argv) do_change_passphrase(pw); if (change_comment) do_change_comment(pw); - if (convert_to_ssh2) - do_convert_to_ssh2(pw); - if (convert_from_ssh2) - do_convert_from_ssh2(pw); + if (convert_to) + do_convert_to(pw); + if (convert_from) + do_convert_from(pw); if (print_public) do_print_public(pw); -- cgit v1.2.3 From f14b9e800624c0b4a5c0fcb90d6cbdf5d14ec830 Mon Sep 17 00:00:00 2001 From: Bryan Cantrill Date: Sat, 9 Jul 2011 11:42:27 -0700 Subject: OS-478 restore lint cleanliness --- usr/src/Makefile.lint | 1 - usr/src/cmd/dlmgmtd/dlmgmt_door.c | 10 +++++----- usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c | 1 + usr/src/cmd/svc/svccfg/svccfg_libscf.c | 5 +++++ usr/src/cmd/zoneadm/zoneadm.c | 1 - usr/src/cmd/zoneadmd/vplat.c | 22 ---------------------- usr/src/common/dis/i386/dis_tables.c | 6 +++++- usr/src/lib/libdladm/common/libdlmgmt.c | 1 - usr/src/uts/common/fs/zfs/arc.c | 2 +- usr/src/uts/common/fs/zfs/dmu_tx.c | 2 +- usr/src/uts/common/fs/zfs/sys/zfs_zone.h | 2 +- usr/src/uts/common/fs/zfs/zfs_zone.c | 4 ++-- usr/src/uts/common/os/clock_highres.c | 2 +- usr/src/uts/intel/dtrace/dtrace_asm.s | 1 + usr/src/uts/intel/ia32/os/archdep.c | 31 +++++++++++++++++++++++++------ 15 files changed, 48 insertions(+), 43 deletions(-) (limited to 'usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c') diff --git a/usr/src/Makefile.lint b/usr/src/Makefile.lint index 879ce1d1f5..6fb1be7899 100644 --- a/usr/src/Makefile.lint +++ b/usr/src/Makefile.lint @@ -459,7 +459,6 @@ COMMON_SUBDIRS = \ lib/pam_modules \ lib/passwdutil \ lib/pkcs11 \ - lib/print \ lib/raidcfg_plugins \ lib/scsi \ lib/smbsrv \ diff --git a/usr/src/cmd/dlmgmtd/dlmgmt_door.c b/usr/src/cmd/dlmgmtd/dlmgmt_door.c index acb44870a8..29d265cfdb 100644 --- a/usr/src/cmd/dlmgmtd/dlmgmt_door.c +++ b/usr/src/cmd/dlmgmtd/dlmgmt_door.c @@ -62,6 +62,7 @@ #include #include #include +#include #include "dlmgmt_impl.h" typedef void dlmgmt_door_handler_t(void *, void *, size_t *, zoneid_t, @@ -1349,11 +1350,10 @@ dlmgmt_zonehalt(void *argp, void *retp, size_t *sz, zoneid_t zoneid, */ int fd; - while ((fd = open(ZONE_LOCK, - O_WRONLY | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)) - < 0) - sleep(1); - close(fd); + while ((fd = open(ZONE_LOCK, O_WRONLY | + O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)) < 0) + (void) sleep(1); + (void) close(fd); dlmgmt_table_lock(B_TRUE); dlmgmt_db_fini(zonehalt->ld_zoneid); diff --git a/usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c b/usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c index e4b7d1e5eb..c79e76ae36 100644 --- a/usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c +++ b/usr/src/cmd/ssh/ssh-keygen/ssh-keygen.c @@ -1170,6 +1170,7 @@ main(int argc, char **argv) break; } fatal("Unsupported conversion format \"%s\"", optarg); + /*NOTREACHED*/ case 'p': change_passphrase = 1; break; diff --git a/usr/src/cmd/svc/svccfg/svccfg_libscf.c b/usr/src/cmd/svc/svccfg/svccfg_libscf.c index 99cce6ad1f..f8f5e0cd94 100644 --- a/usr/src/cmd/svc/svccfg/svccfg_libscf.c +++ b/usr/src/cmd/svc/svccfg/svccfg_libscf.c @@ -6822,13 +6822,16 @@ lscf_instance_verify(scf_scope_t *scope, entity_t *svc, entity_t *inst) switch (ret) { case SCF_ERROR_DELETED: err = ENODEV; + break; case SCF_ERROR_CONNECTION_BROKEN: warn(gettext("Lost repository connection\n")); err = ECONNABORTED; + break; case SCF_ERROR_NOT_FOUND: warn(gettext("Instance \"%s\" disappeared out from " "under us.\n"), inst->sc_name); err = ENOENT; + break; default: bad_error("scf_service_get_instance", ret); } @@ -6851,9 +6854,11 @@ lscf_instance_verify(scf_scope_t *scope, entity_t *svc, entity_t *inst) switch (ret) { case SCF_ERROR_DELETED: err = ENODEV; + break; case SCF_ERROR_CONNECTION_BROKEN: warn(gettext("Lost repository connection\n")); err = ECONNABORTED; + break; default: bad_error("scf_service_get_instance", ret); } diff --git a/usr/src/cmd/zoneadm/zoneadm.c b/usr/src/cmd/zoneadm/zoneadm.c index d0b8c7a03f..556b0dd148 100644 --- a/usr/src/cmd/zoneadm/zoneadm.c +++ b/usr/src/cmd/zoneadm/zoneadm.c @@ -2535,7 +2535,6 @@ verify_handle(int cmd_num, zone_dochandle_t handle, char *argv[]) dladm_handle_t dh; dladm_status_t status; datalink_id_t linkid; - char errmsg[DLADM_STRSIZE]; in_alt_root = zonecfg_in_alt_root(); if (in_alt_root) diff --git a/usr/src/cmd/zoneadmd/vplat.c b/usr/src/cmd/zoneadmd/vplat.c index d2b8c79964..ccb2d867b4 100644 --- a/usr/src/cmd/zoneadmd/vplat.c +++ b/usr/src/cmd/zoneadmd/vplat.c @@ -3133,28 +3133,6 @@ remove_datalink_protect(zlog_t *zlogp, zoneid_t zoneid) return (0); } -static int -unconfigure_exclusive_network_interfaces(zlog_t *zlogp, zoneid_t zoneid) -{ - int dlnum = 0; - - /* - * The kernel shutdown callback for the dls module should have removed - * all datalinks from this zone. If any remain, then there's a - * problem. - */ - if (zone_list_datalink(zoneid, &dlnum, NULL) != 0) { - zerror(zlogp, B_TRUE, "unable to list network interfaces"); - return (-1); - } - if (dlnum != 0) { - zerror(zlogp, B_FALSE, - "datalinks remain in zone after shutdown"); - return (-1); - } - return (0); -} - static int tcp_abort_conn(zlog_t *zlogp, zoneid_t zoneid, const struct sockaddr_storage *local, const struct sockaddr_storage *remote) diff --git a/usr/src/common/dis/i386/dis_tables.c b/usr/src/common/dis/i386/dis_tables.c index 5b3286c63e..62747134d7 100644 --- a/usr/src/common/dis/i386/dis_tables.c +++ b/usr/src/common/dis/i386/dis_tables.c @@ -3520,6 +3520,7 @@ just_mem: case VMx: if (mode == 3) { +#ifdef DIS_TEXT char *vminstr; switch (r_m) { @@ -3539,9 +3540,12 @@ just_mem: goto error; } -#ifdef DIS_TEXT (void) strncpy(x->d86_mnem, vminstr, OPLEN); +#else + if (r_m < 1 || r_m > 4) + goto error; #endif + NOMEM; break; } diff --git a/usr/src/lib/libdladm/common/libdlmgmt.c b/usr/src/lib/libdladm/common/libdlmgmt.c index abb956f94c..c9c7906934 100644 --- a/usr/src/lib/libdladm/common/libdlmgmt.c +++ b/usr/src/lib/libdladm/common/libdlmgmt.c @@ -552,7 +552,6 @@ dladm_zname2info(dladm_handle_t handle, const char *zonename, const char *link, datalink_id_t linkid; dladm_status_t status; size_t sz = sizeof (retval); - zoneid_t curr_zoneid; getlinkid.ld_cmd = DLMGMT_CMD_GETLINKID; (void) strlcpy(getlinkid.ld_link, link, MAXLINKNAMELEN); diff --git a/usr/src/uts/common/fs/zfs/arc.c b/usr/src/uts/common/fs/zfs/arc.c index 78299b85a0..f563c67516 100644 --- a/usr/src/uts/common/fs/zfs/arc.c +++ b/usr/src/uts/common/fs/zfs/arc.c @@ -2922,7 +2922,7 @@ top: * should delay this I/O if this zone is using more than its I/O * priority allows. */ - zfs_zone_io_throttle(ZFS_ZONE_IOP_READ, size); + zfs_zone_io_throttle(ZFS_ZONE_IOP_READ); if (*arc_flags & ARC_WAIT) return (zio_wait(rzio)); diff --git a/usr/src/uts/common/fs/zfs/dmu_tx.c b/usr/src/uts/common/fs/zfs/dmu_tx.c index 75aa3cb9cb..3492fd5b12 100644 --- a/usr/src/uts/common/fs/zfs/dmu_tx.c +++ b/usr/src/uts/common/fs/zfs/dmu_tx.c @@ -220,7 +220,7 @@ dmu_tx_count_write(dmu_tx_hold_t *txh, uint64_t off, uint64_t len) if (len == 0) return; - zfs_zone_io_throttle(ZFS_ZONE_IOP_LOGICAL_WRITE, len); + zfs_zone_io_throttle(ZFS_ZONE_IOP_LOGICAL_WRITE); min_bs = SPA_MINBLOCKSHIFT; max_bs = SPA_MAXBLOCKSHIFT; diff --git a/usr/src/uts/common/fs/zfs/sys/zfs_zone.h b/usr/src/uts/common/fs/zfs/sys/zfs_zone.h index 5e84fba949..069ec004f3 100644 --- a/usr/src/uts/common/fs/zfs/sys/zfs_zone.h +++ b/usr/src/uts/common/fs/zfs/sys/zfs_zone.h @@ -42,7 +42,7 @@ typedef enum { ZFS_ZONE_IOP_LOGICAL_WRITE, } zfs_zone_iop_type_t; -extern void zfs_zone_io_throttle(zfs_zone_iop_type_t, uint64_t); +extern void zfs_zone_io_throttle(zfs_zone_iop_type_t); extern void zfs_zone_zio_init(zio_t *); extern void zfs_zone_zio_start(zio_t *); diff --git a/usr/src/uts/common/fs/zfs/zfs_zone.c b/usr/src/uts/common/fs/zfs/zfs_zone.c index 8f90e8158b..08f4f38e04 100644 --- a/usr/src/uts/common/fs/zfs/zfs_zone.c +++ b/usr/src/uts/common/fs/zfs/zfs_zone.c @@ -33,7 +33,7 @@ */ void -zfs_zone_io_throttle(zfs_zone_iop_type_t type, uint64_t size) +zfs_zone_io_throttle(zfs_zone_iop_type_t type) { } @@ -872,7 +872,7 @@ zfs_zone_zio_init(zio_t *zp) * retrieve the data to be read through dmu_read_uio. */ void -zfs_zone_io_throttle(zfs_zone_iop_type_t type, uint64_t size) +zfs_zone_io_throttle(zfs_zone_iop_type_t type) { zone_t *zonep = curzone; hrtime_t unow; diff --git a/usr/src/uts/common/os/clock_highres.c b/usr/src/uts/common/os/clock_highres.c index 03dd1b4371..b93ba697d9 100644 --- a/usr/src/uts/common/os/clock_highres.c +++ b/usr/src/uts/common/os/clock_highres.c @@ -129,7 +129,7 @@ clock_highres_timer_settime(itimer_t *it, int flags, cyctime.cyt_when += gethrtime(); hrt2ts(cyctime.cyt_when, &it->it_itime.it_value); - cyclic_reprogram(cyc, cyctime.cyt_when); + (void) cyclic_reprogram(cyc, cyctime.cyt_when); return (0); } diff --git a/usr/src/uts/intel/dtrace/dtrace_asm.s b/usr/src/uts/intel/dtrace/dtrace_asm.s index 754343925c..febd31fb7f 100644 --- a/usr/src/uts/intel/dtrace/dtrace_asm.s +++ b/usr/src/uts/intel/dtrace/dtrace_asm.s @@ -62,6 +62,7 @@ dtrace_getfp(void) #if defined(lint) || defined(__lint) +/*ARGSUSED*/ uint64_t dtrace_getvmreg(uint32_t reg, volatile uint16_t *flags) { return (0); } diff --git a/usr/src/uts/intel/ia32/os/archdep.c b/usr/src/uts/intel/ia32/os/archdep.c index 7603ccb97d..423b94a13e 100644 --- a/usr/src/uts/intel/ia32/os/archdep.c +++ b/usr/src/uts/intel/ia32/os/archdep.c @@ -962,9 +962,24 @@ bind_hwcap(void) auxv_hwcap |= AV_386_AHF; #endif - if (auxv_hwcap_include || auxv_hwcap_exclude) - cmn_err(CE_CONT, "?user ABI extensions: %b\n", - auxv_hwcap, FMT_AV_386); + if (auxv_hwcap_include || auxv_hwcap_exclude) { + /* + * The below assignment is regrettably required to get lint + * to accept the validity of our format string. The format + * string is in fact valid, but whatever intelligence in lint + * understands the cmn_err()-specific %b appears to have an + * off-by-one error: it (mistakenly) complains about bit + * number 32 (even though this is explicitly permitted). + * Normally, one would will away such warnings with a "LINTED" + * directive, but for reasons unclear and unknown, lint + * refuses to be assuaged in this case. Fortunately, lint + * doesn't pretend to have solved the Halting Problem -- + * and as soon as the format string is programmatic, it + * knows enough to shut up. + */ + const char *fmt = "?user ABI extensions: %b\n"; + cmn_err(CE_CONT, fmt, auxv_hwcap, FMT_AV_386); + } #if defined(_SYSCALL32_IMPL) auxv_hwcap32 = (auxv_hwcap32_include | cpu_hwcap_flags) & @@ -986,9 +1001,13 @@ bind_hwcap(void) auxv_hwcap32 |= AV_386_AHF; #endif - if (auxv_hwcap32_include || auxv_hwcap32_exclude) - cmn_err(CE_CONT, "?32-bit user ABI extensions: %b\n", - auxv_hwcap32, FMT_AV_386); + if (auxv_hwcap32_include || auxv_hwcap32_exclude) { + /* + * See the block comment in the cmn_err() of auxv_hwcap, above. + */ + const char *fmt = "?32-bit user ABI extensions: %b\n"; + cmn_err(CE_CONT, fmt, auxv_hwcap32, FMT_AV_386); + } #endif } -- cgit v1.2.3