ima/evm: Fix type mismatch
The endianness of a variable written to the measurement list cannot be determined at compile time, as it depends on the value of the ima_canonical_fmt global variable (set through a kernel option with the same name if the machine is big endian). If ima_canonical_fmt is false, the endianness of a variable is the same as the machine; if ima_canonical_fmt is true, the endianness is little endian. The warning arises due to this type of instruction: var = cpu_to_leXX(var) which tries to assign a value in little endian to a variable with native endianness (little or big endian). Given that the variables set with this instruction are not used in any operation but just written to a buffer, it is safe to force the type of the value being set to be the same of the type of the variable with: var = (__force <var type>)cpu_to_leXX(var) Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
This commit is contained in:
committed by
Mimi Zohar
parent
24c9ae23bd
commit
6b26285f44
@@ -360,7 +360,7 @@ int evm_read_protected_xattrs(struct dentry *dentry, u8 *buffer,
|
|||||||
size = sizeof(u32);
|
size = sizeof(u32);
|
||||||
if (buffer) {
|
if (buffer) {
|
||||||
if (canonical_fmt)
|
if (canonical_fmt)
|
||||||
rc = cpu_to_le32(rc);
|
rc = (__force int)cpu_to_le32(rc);
|
||||||
|
|
||||||
*(u32 *)(buffer + total_size) = rc;
|
*(u32 *)(buffer + total_size) = rc;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -598,8 +598,8 @@ static int ima_calc_field_array_hash_tfm(struct ima_field_data *field_data,
|
|||||||
u8 buffer[IMA_EVENT_NAME_LEN_MAX + 1] = { 0 };
|
u8 buffer[IMA_EVENT_NAME_LEN_MAX + 1] = { 0 };
|
||||||
u8 *data_to_hash = field_data[i].data;
|
u8 *data_to_hash = field_data[i].data;
|
||||||
u32 datalen = field_data[i].len;
|
u32 datalen = field_data[i].len;
|
||||||
u32 datalen_to_hash =
|
u32 datalen_to_hash = !ima_canonical_fmt ?
|
||||||
!ima_canonical_fmt ? datalen : cpu_to_le32(datalen);
|
datalen : (__force u32)cpu_to_le32(datalen);
|
||||||
|
|
||||||
if (strcmp(td->name, IMA_TEMPLATE_IMA_NAME) != 0) {
|
if (strcmp(td->name, IMA_TEMPLATE_IMA_NAME) != 0) {
|
||||||
rc = crypto_shash_update(shash,
|
rc = crypto_shash_update(shash,
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ int ima_measurements_show(struct seq_file *m, void *v)
|
|||||||
* PCR used defaults to the same (config option) in
|
* PCR used defaults to the same (config option) in
|
||||||
* little-endian format, unless set in policy
|
* little-endian format, unless set in policy
|
||||||
*/
|
*/
|
||||||
pcr = !ima_canonical_fmt ? e->pcr : cpu_to_le32(e->pcr);
|
pcr = !ima_canonical_fmt ? e->pcr : (__force u32)cpu_to_le32(e->pcr);
|
||||||
ima_putc(m, &pcr, sizeof(e->pcr));
|
ima_putc(m, &pcr, sizeof(e->pcr));
|
||||||
|
|
||||||
/* 2nd: template digest */
|
/* 2nd: template digest */
|
||||||
@@ -155,7 +155,7 @@ int ima_measurements_show(struct seq_file *m, void *v)
|
|||||||
|
|
||||||
/* 3rd: template name size */
|
/* 3rd: template name size */
|
||||||
namelen = !ima_canonical_fmt ? strlen(template_name) :
|
namelen = !ima_canonical_fmt ? strlen(template_name) :
|
||||||
cpu_to_le32(strlen(template_name));
|
(__force u32)cpu_to_le32(strlen(template_name));
|
||||||
ima_putc(m, &namelen, sizeof(namelen));
|
ima_putc(m, &namelen, sizeof(namelen));
|
||||||
|
|
||||||
/* 4th: template name */
|
/* 4th: template name */
|
||||||
@@ -167,7 +167,7 @@ int ima_measurements_show(struct seq_file *m, void *v)
|
|||||||
|
|
||||||
if (!is_ima_template) {
|
if (!is_ima_template) {
|
||||||
template_data_len = !ima_canonical_fmt ? e->template_data_len :
|
template_data_len = !ima_canonical_fmt ? e->template_data_len :
|
||||||
cpu_to_le32(e->template_data_len);
|
(__force u32)cpu_to_le32(e->template_data_len);
|
||||||
ima_putc(m, &template_data_len, sizeof(e->template_data_len));
|
ima_putc(m, &template_data_len, sizeof(e->template_data_len));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,8 @@ static void ima_show_template_data_binary(struct seq_file *m,
|
|||||||
strlen(field_data->data) : field_data->len;
|
strlen(field_data->data) : field_data->len;
|
||||||
|
|
||||||
if (show != IMA_SHOW_BINARY_NO_FIELD_LEN) {
|
if (show != IMA_SHOW_BINARY_NO_FIELD_LEN) {
|
||||||
u32 field_len = !ima_canonical_fmt ? len : cpu_to_le32(len);
|
u32 field_len = !ima_canonical_fmt ?
|
||||||
|
len : (__force u32)cpu_to_le32(len);
|
||||||
|
|
||||||
ima_putc(m, &field_len, sizeof(field_len));
|
ima_putc(m, &field_len, sizeof(field_len));
|
||||||
}
|
}
|
||||||
@@ -570,9 +571,9 @@ static int ima_eventinodedac_init_common(struct ima_event_data *event_data,
|
|||||||
|
|
||||||
if (ima_canonical_fmt) {
|
if (ima_canonical_fmt) {
|
||||||
if (sizeof(id) == sizeof(u16))
|
if (sizeof(id) == sizeof(u16))
|
||||||
id = cpu_to_le16(id);
|
id = (__force u16)cpu_to_le16(id);
|
||||||
else
|
else
|
||||||
id = cpu_to_le32(id);
|
id = (__force u32)cpu_to_le32(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ima_write_template_field_data((void *)&id, sizeof(id),
|
return ima_write_template_field_data((void *)&id, sizeof(id),
|
||||||
@@ -607,7 +608,7 @@ int ima_eventinodemode_init(struct ima_event_data *event_data,
|
|||||||
struct ima_field_data *field_data)
|
struct ima_field_data *field_data)
|
||||||
{
|
{
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
umode_t mode;
|
u16 mode;
|
||||||
|
|
||||||
if (!event_data->file)
|
if (!event_data->file)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -615,7 +616,7 @@ int ima_eventinodemode_init(struct ima_event_data *event_data,
|
|||||||
inode = file_inode(event_data->file);
|
inode = file_inode(event_data->file);
|
||||||
mode = inode->i_mode;
|
mode = inode->i_mode;
|
||||||
if (ima_canonical_fmt)
|
if (ima_canonical_fmt)
|
||||||
mode = cpu_to_le16(mode);
|
mode = (__force u16)cpu_to_le16(mode);
|
||||||
|
|
||||||
return ima_write_template_field_data((char *)&mode, sizeof(mode),
|
return ima_write_template_field_data((char *)&mode, sizeof(mode),
|
||||||
DATA_FMT_UINT, field_data);
|
DATA_FMT_UINT, field_data);
|
||||||
|
|||||||
Reference in New Issue
Block a user