blob: 0481a3835a62b8c4f6b88b50d923da052b634287 [file] [log] [blame]
/* { dg-additional-options "-fconserve-stack" } */
/* Check to make sure that if
rfc4106_set_hash_subkey gets split,
the error function does not gets split away
from the if statement conditionalizing it. */
struct crypto_aes_ctx {
char key_dec[128];
};
int rfc4106_set_hash_subkey_hash_subkey;
void __write_overflow(void)__attribute__((__error__("")));
void __write_overflow1(void);
void aes_encrypt(void*);
void fortify_panic(const char*) __attribute__((__noreturn__)) ;
char *rfc4106_set_hash_subkey(struct crypto_aes_ctx *ctx) {
void *a = &ctx->key_dec[0];
unsigned p_size = __builtin_object_size(a, 0);
#ifdef __OPTIMIZE__
if (p_size < 16) {
__write_overflow1();
fortify_panic(__func__);
}
if (p_size < 32) {
__write_overflow();
fortify_panic(__func__);
}
#endif
aes_encrypt(ctx);
return ctx->key_dec;
}
char *(*gg)(struct crypto_aes_ctx *) = rfc4106_set_hash_subkey;
void a(void)
{
struct crypto_aes_ctx ctx;
rfc4106_set_hash_subkey(&ctx);
}
void b(void)
{
struct crypto_aes_ctx ctx;
ctx.key_dec[0] = 0;
rfc4106_set_hash_subkey(&ctx);
}