int diag_masks_init(void) { int err = 0; err = diag_msg_mask_init(); if (err) goto fail; err = diag_build_time_mask_init(); if (err) goto fail; err = diag_log_mask_init(); if (err) goto fail; err = diag_event_mask_init(); if (err) goto fail; if (driver->buf_feature_mask_update == NULL) { driver->buf_feature_mask_update = kzalloc(sizeof( struct diag_ctrl_feature_mask) + FEATURE_MASK_LEN, GFP_KERNEL); if (driver->buf_feature_mask_update == NULL) goto fail; kmemleak_not_leak(driver->buf_feature_mask_update); } return 0; fail: pr_err("diag: Could not initialize diag mask buffers\n"); diag_masks_exit(); return -ENOMEM; }
void diag_masks_init(void) { driver->event_status = DIAG_CTRL_MASK_INVALID; driver->msg_status = DIAG_CTRL_MASK_INVALID; driver->log_status = DIAG_CTRL_MASK_INVALID; if (driver->event_mask == NULL) { driver->event_mask = kzalloc(sizeof( struct diag_ctrl_event_mask), GFP_KERNEL); if (driver->event_mask == NULL) goto err; kmemleak_not_leak(driver->event_mask); } if (driver->msg_mask == NULL) { driver->msg_mask = kzalloc(sizeof( struct diag_ctrl_msg_mask), GFP_KERNEL); if (driver->msg_mask == NULL) goto err; kmemleak_not_leak(driver->msg_mask); } if (driver->log_mask == NULL) { driver->log_mask = kzalloc(sizeof( struct diag_ctrl_log_mask), GFP_KERNEL); if (driver->log_mask == NULL) goto err; kmemleak_not_leak(driver->log_mask); } if (driver->buf_msg_mask_update == NULL) { driver->buf_msg_mask_update = kzalloc(APPS_BUF_SIZE, GFP_KERNEL); if (driver->buf_msg_mask_update == NULL) goto err; kmemleak_not_leak(driver->buf_msg_mask_update); } if (driver->buf_log_mask_update == NULL) { driver->buf_log_mask_update = kzalloc(APPS_BUF_SIZE, GFP_KERNEL); if (driver->buf_log_mask_update == NULL) goto err; kmemleak_not_leak(driver->buf_log_mask_update); } if (driver->buf_event_mask_update == NULL) { driver->buf_event_mask_update = kzalloc(APPS_BUF_SIZE, GFP_KERNEL); if (driver->buf_event_mask_update == NULL) goto err; kmemleak_not_leak(driver->buf_event_mask_update); } if (driver->msg_masks == NULL) { driver->msg_masks = kzalloc(MSG_MASK_SIZE, GFP_KERNEL); if (driver->msg_masks == NULL) goto err; kmemleak_not_leak(driver->msg_masks); } if (driver->buf_feature_mask_update == NULL) { driver->buf_feature_mask_update = kzalloc(sizeof( struct diag_ctrl_feature_mask) + FEATURE_MASK_LEN_BYTES, GFP_KERNEL); if (driver->buf_feature_mask_update == NULL) goto err; kmemleak_not_leak(driver->buf_feature_mask_update); } if (driver->feature_mask == NULL) { driver->feature_mask = kzalloc(sizeof( struct diag_ctrl_feature_mask), GFP_KERNEL); if (driver->feature_mask == NULL) goto err; kmemleak_not_leak(driver->feature_mask); } diag_create_msg_mask_table(); diag_event_num_bytes = 0; if (driver->log_masks == NULL) { driver->log_masks = kzalloc(LOG_MASK_SIZE, GFP_KERNEL); if (driver->log_masks == NULL) goto err; kmemleak_not_leak(driver->log_masks); } diag_log_mask_init(); if (driver->event_masks == NULL) { driver->event_masks = kzalloc(EVENT_MASK_SIZE, GFP_KERNEL); if (driver->event_masks == NULL) goto err; kmemleak_not_leak(driver->event_masks); } return; err: pr_err("diag: Could not initialize diag mask buffers"); kfree(driver->event_mask); kfree(driver->log_mask); kfree(driver->msg_mask); kfree(driver->msg_masks); kfree(driver->log_masks); kfree(driver->event_masks); kfree(driver->feature_mask); kfree(driver->buf_feature_mask_update); }