diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/aio/lio_listio.c | 2 | ||||
-rw-r--r-- | src/crypt/crypt_des.c | 19 | ||||
-rw-r--r-- | src/crypt/crypt_md5.c | 2 | ||||
-rw-r--r-- | src/crypt/crypt_sha256.c | 2 | ||||
-rw-r--r-- | src/crypt/crypt_sha512.c | 2 | ||||
-rw-r--r-- | src/ldso/dynlink.c | 18 | ||||
-rw-r--r-- | src/regex/regexec.c | 3 |
7 files changed, 29 insertions, 19 deletions
diff --git a/src/aio/lio_listio.c b/src/aio/lio_listio.c index 532b17ce..64a6ebc1 100644 --- a/src/aio/lio_listio.c +++ b/src/aio/lio_listio.c @@ -109,7 +109,7 @@ int lio_listio(int mode, struct aiocb *restrict const *restrict cbs, int cnt, st if (mode == LIO_WAIT) { ret = lio_wait(st); free(st); - return 0; + return ret; } if (st) { diff --git a/src/crypt/crypt_des.c b/src/crypt/crypt_des.c index 4454a130..dc95dcaa 100644 --- a/src/crypt/crypt_des.c +++ b/src/crypt/crypt_des.c @@ -879,10 +879,7 @@ static char *_crypt_extended_r_uut(const char *_key, const char *_setting, char const unsigned char *key = (const unsigned char *)_key; const unsigned char *setting = (const unsigned char *)_setting; struct expanded_key ekey; - union { - unsigned char c[8]; - uint32_t i[2]; - } keybuf; + unsigned char keybuf[8]; unsigned char *p, *q; uint32_t count, salt, l, r0, r1; unsigned int i; @@ -891,13 +888,13 @@ static char *_crypt_extended_r_uut(const char *_key, const char *_setting, char * Copy the key, shifting each character left by one bit and padding * with zeroes. */ - q = keybuf.c; - while (q <= &keybuf.c[sizeof(keybuf.c) - 1]) { + q = keybuf; + while (q <= &keybuf[sizeof(keybuf) - 1]) { *q++ = *key << 1; if (*key) key++; } - des_setkey(keybuf.c, &ekey); + des_setkey(keybuf, &ekey); if (*setting == _PASSWORD_EFMT1) { /* @@ -925,14 +922,14 @@ static char *_crypt_extended_r_uut(const char *_key, const char *_setting, char /* * Encrypt the key with itself. */ - des_cipher(keybuf.c, keybuf.c, 1, 0, &ekey); + des_cipher(keybuf, keybuf, 1, 0, &ekey); /* * And XOR with the next 8 characters of the key. */ - q = keybuf.c; - while (q <= &keybuf.c[sizeof(keybuf.c) - 1] && *key) + q = keybuf; + while (q <= &keybuf[sizeof(keybuf) - 1] && *key) *q++ ^= *key++ << 1; - des_setkey(keybuf.c, &ekey); + des_setkey(keybuf, &ekey); } memcpy(output, setting, 9); diff --git a/src/crypt/crypt_md5.c b/src/crypt/crypt_md5.c index 02f22444..70ab8b99 100644 --- a/src/crypt/crypt_md5.c +++ b/src/crypt/crypt_md5.c @@ -118,7 +118,7 @@ static void md5_init(struct md5 *s) s->h[3] = 0x10325476; } -static void md5_sum(struct md5 *s, uint8_t md[16]) +static void md5_sum(struct md5 *s, uint8_t *md) { int i; diff --git a/src/crypt/crypt_sha256.c b/src/crypt/crypt_sha256.c index 076e4b16..e01a208b 100644 --- a/src/crypt/crypt_sha256.c +++ b/src/crypt/crypt_sha256.c @@ -119,7 +119,7 @@ static void sha256_init(struct sha256 *s) s->h[7] = 0x5be0cd19; } -static void sha256_sum(struct sha256 *s, uint8_t md[20]) +static void sha256_sum(struct sha256 *s, uint8_t *md) { int i; diff --git a/src/crypt/crypt_sha512.c b/src/crypt/crypt_sha512.c index 0f1de814..8325d77c 100644 --- a/src/crypt/crypt_sha512.c +++ b/src/crypt/crypt_sha512.c @@ -136,7 +136,7 @@ static void sha512_init(struct sha512 *s) s->h[7] = 0x5be0cd19137e2179ULL; } -static void sha512_sum(struct sha512 *s, uint8_t md[20]) +static void sha512_sum(struct sha512 *s, uint8_t *md) { int i; diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index 935367e3..782e979f 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -1091,6 +1091,15 @@ end: return p; } +static int invalid_dso_handle(struct dso *h) +{ + struct dso *p; + for (p=head; p; p=p->next) if (h==p) return 0; + snprintf(errbuf, sizeof errbuf, "Invalid library handle %p", (void *)h); + errflag = 1; + return 1; +} + static void *do_dlsym(struct dso *p, const char *s, void *ra) { size_t i; @@ -1110,6 +1119,7 @@ static void *do_dlsym(struct dso *p, const char *s, void *ra) return __tls_get_addr((size_t []){def.dso->tls_id, def.sym->st_value}); return def.dso->base + def.sym->st_value; } + if (invalid_dso_handle(p)) return 0; if (p->ghashtab) { gh = gnu_hash(s); sym = gnu_lookup(s, gh, p); @@ -1236,6 +1246,12 @@ int dl_iterate_phdr(int(*callback)(struct dl_phdr_info *info, size_t size, void return ret; } #else +static int invalid_dso_handle(struct dso *h) +{ + snprintf(errbuf, sizeof errbuf, "Invalid library handle %p", (void *)h); + errflag = 1; + return 1; +} void *dlopen(const char *file, int mode) { return 0; @@ -1259,5 +1275,5 @@ char *dlerror() int dlclose(void *p) { - return 0; + return invalid_dso_handle(p); } diff --git a/src/regex/regexec.c b/src/regex/regexec.c index 855cef57..674c5907 100644 --- a/src/regex/regexec.c +++ b/src/regex/regexec.c @@ -596,7 +596,6 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, started from. */ int next_c_start; const char *str_byte_start; - int pos_start = -1; #ifdef TRE_MBSTATE mbstate_t mbstate_start; #endif /* TRE_MBSTATE */ @@ -676,9 +675,7 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, } state = NULL; - pos = pos_start; GET_NEXT_WCHAR(); - pos_start = pos; next_c_start = next_c; str_byte_start = str_byte; #ifdef TRE_MBSTATE |