about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/aio/lio_listio.c2
-rw-r--r--src/crypt/crypt_des.c19
-rw-r--r--src/crypt/crypt_md5.c2
-rw-r--r--src/crypt/crypt_sha256.c2
-rw-r--r--src/crypt/crypt_sha512.c2
-rw-r--r--src/ldso/dynlink.c18
-rw-r--r--src/regex/regexec.c3
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