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  | 
