| .. | .. |
|---|
| 1 | 1 | /* |
|---|
| 2 | 2 | * SRAM protect-exec region helper functions |
|---|
| 3 | 3 | * |
|---|
| 4 | | - * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ |
|---|
| 4 | + * Copyright (C) 2017 Texas Instruments Incorporated - https://www.ti.com/ |
|---|
| 5 | 5 | * Dave Gerlach |
|---|
| 6 | 6 | * |
|---|
| 7 | 7 | * This program is free software; you can redistribute it and/or modify |
|---|
| .. | .. |
|---|
| 85 | 85 | unsigned long base; |
|---|
| 86 | 86 | int pages; |
|---|
| 87 | 87 | void *dst_cpy; |
|---|
| 88 | + int ret; |
|---|
| 88 | 89 | |
|---|
| 89 | 90 | mutex_lock(&exec_pool_list_mutex); |
|---|
| 90 | 91 | list_for_each_entry(p, &exec_pool_list, list) { |
|---|
| .. | .. |
|---|
| 96 | 97 | if (!part) |
|---|
| 97 | 98 | return NULL; |
|---|
| 98 | 99 | |
|---|
| 99 | | - if (!addr_in_gen_pool(pool, (unsigned long)dst, size)) |
|---|
| 100 | + if (!gen_pool_has_addr(pool, (unsigned long)dst, size)) |
|---|
| 100 | 101 | return NULL; |
|---|
| 101 | 102 | |
|---|
| 102 | 103 | base = (unsigned long)part->base; |
|---|
| .. | .. |
|---|
| 104 | 105 | |
|---|
| 105 | 106 | mutex_lock(&part->lock); |
|---|
| 106 | 107 | |
|---|
| 107 | | - set_memory_nx((unsigned long)base, pages); |
|---|
| 108 | | - set_memory_rw((unsigned long)base, pages); |
|---|
| 108 | + ret = set_memory_nx((unsigned long)base, pages); |
|---|
| 109 | + if (ret) |
|---|
| 110 | + goto error_out; |
|---|
| 111 | + ret = set_memory_rw((unsigned long)base, pages); |
|---|
| 112 | + if (ret) |
|---|
| 113 | + goto error_out; |
|---|
| 109 | 114 | |
|---|
| 110 | 115 | dst_cpy = fncpy(dst, src, size); |
|---|
| 111 | 116 | |
|---|
| 112 | | - set_memory_ro((unsigned long)base, pages); |
|---|
| 113 | | - set_memory_x((unsigned long)base, pages); |
|---|
| 117 | + ret = set_memory_ro((unsigned long)base, pages); |
|---|
| 118 | + if (ret) |
|---|
| 119 | + goto error_out; |
|---|
| 120 | + ret = set_memory_x((unsigned long)base, pages); |
|---|
| 121 | + if (ret) |
|---|
| 122 | + goto error_out; |
|---|
| 114 | 123 | |
|---|
| 115 | 124 | mutex_unlock(&part->lock); |
|---|
| 116 | 125 | |
|---|
| 117 | 126 | return dst_cpy; |
|---|
| 127 | + |
|---|
| 128 | +error_out: |
|---|
| 129 | + mutex_unlock(&part->lock); |
|---|
| 130 | + return NULL; |
|---|
| 118 | 131 | } |
|---|
| 119 | 132 | EXPORT_SYMBOL_GPL(sram_exec_copy); |
|---|