diff options
| author | Ghanim Fodi <gfodi@codeaurora.org> | 2017-12-19 19:15:19 +0200 |
|---|---|---|
| committer | Ghanim Fodi <gfodi@codeaurora.org> | 2017-12-28 10:20:41 +0200 |
| commit | f9e828bd55773b09aad58563b3d4588fb971b245 (patch) | |
| tree | f32281caacdcc484a5c593f1cdc0531ec61f4607 /drivers/platform | |
| parent | 8ed108c9770aa1fb055f8129121e60a708067f3f (diff) | |
msm: ipa: Fix the handling of default IPA header
Default IPA header is added or deleted from the driver
directly and not by user space application. This change
prevents adding/deleting it from user application which
may cause inconsistencies in the driver. Also the change
fixes the header reset function to skip on the correct
default header.
Change-Id: Ic813433655411f1447db8b0c15efdf64038d8c26
CRs-fixed: 2151146
Signed-off-by: Ghanim Fodi <gfodi@codeaurora.org>
Diffstat (limited to 'drivers/platform')
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c | 28 | ||||
| -rw-r--r-- | drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c | 28 |
2 files changed, 42 insertions, 14 deletions
diff --git a/drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c b/drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c index 49aa7f25347d..fbbb3f20b571 100644 --- a/drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c +++ b/drivers/platform/msm/ipa/ipa_v2/ipa_hdr.c @@ -910,8 +910,17 @@ int __ipa_del_hdr(u32 hdr_hdl, bool by_user) return -EINVAL; } - if (by_user) + if (by_user) { + if (!strcmp(entry->name, IPA_LAN_RX_HDR_NAME)) { + IPADBG("Trying to delete hdr %s offset=%u\n", + entry->name, entry->offset_entry->offset); + if (!entry->offset_entry->offset) { + IPAERR("User cannot delete default header\n"); + return -EPERM; + } + } entry->user_deleted = true; + } if (--entry->ref_cnt) { IPADBG("hdr_hdl %x ref_cnt %d\n", hdr_hdl, entry->ref_cnt); @@ -1234,13 +1243,18 @@ int ipa2_reset_hdr(void) /* do not remove the default header */ if (!strcmp(entry->name, IPA_LAN_RX_HDR_NAME)) { - if (entry->is_hdr_proc_ctx) { - mutex_unlock(&ipa_ctx->lock); - WARN_ON(1); - IPAERR("default header is proc ctx\n"); - return -EFAULT; + IPADBG("Trying to remove hdr %s offset=%u\n", + entry->name, entry->offset_entry->offset); + if (!entry->offset_entry->offset) { + if (entry->is_hdr_proc_ctx) { + mutex_unlock(&ipa_ctx->lock); + WARN_ON(1); + IPAERR("default header is proc ctx\n"); + return -EFAULT; + } + IPADBG("skip default header\n"); + continue; } - continue; } if (ipa_id_find(entry->id) == NULL) { diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c b/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c index ce35ba02154d..b5b8643f24a9 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_hdr.c @@ -678,8 +678,17 @@ int __ipa3_del_hdr(u32 hdr_hdl, bool by_user) return -EINVAL; } - if (by_user) + if (by_user) { + if (!strcmp(entry->name, IPA_LAN_RX_HDR_NAME)) { + IPADBG("Trying to delete hdr %s offset=%u\n", + entry->name, entry->offset_entry->offset); + if (!entry->offset_entry->offset) { + IPAERR("User cannot delete default header\n"); + return -EPERM; + } + } entry->user_deleted = true; + } if (--entry->ref_cnt) { IPADBG("hdr_hdl %x ref_cnt %d\n", hdr_hdl, entry->ref_cnt); @@ -978,13 +987,18 @@ int ipa3_reset_hdr(void) /* do not remove the default header */ if (!strcmp(entry->name, IPA_LAN_RX_HDR_NAME)) { - if (entry->is_hdr_proc_ctx) { - IPAERR("default header is proc ctx\n"); - mutex_unlock(&ipa3_ctx->lock); - WARN_ON(1); - return -EFAULT; + IPADBG("Trying to remove hdr %s offset=%u\n", + entry->name, entry->offset_entry->offset); + if (!entry->offset_entry->offset) { + if (entry->is_hdr_proc_ctx) { + IPAERR("default header is proc ctx\n"); + mutex_unlock(&ipa3_ctx->lock); + WARN_ON(1); + return -EFAULT; + } + IPADBG("skip default header\n"); + continue; } - continue; } if (ipa3_id_find(entry->id) == NULL) { |
