@@ -65,38 +65,30 @@ static int trusted_tee_seal(struct trusted_key_payload *p, char *datablob)
65
65
int ret ;
66
66
struct tee_ioctl_invoke_arg inv_arg ;
67
67
struct tee_param param [4 ];
68
- struct tee_shm * reg_shm_in = NULL , * reg_shm_out = NULL ;
68
+ struct tee_shm * reg_shm = NULL ;
69
69
70
70
memset (& inv_arg , 0 , sizeof (inv_arg ));
71
71
memset (& param , 0 , sizeof (param ));
72
72
73
- reg_shm_in = tee_shm_register_kernel_buf (pvt_data .ctx , p -> key ,
74
- p -> key_len );
75
- if (IS_ERR (reg_shm_in )) {
76
- dev_err (pvt_data .dev , "key shm register failed\n" );
77
- return PTR_ERR (reg_shm_in );
78
- }
79
-
80
- reg_shm_out = tee_shm_register_kernel_buf (pvt_data .ctx , p -> blob ,
81
- sizeof (p -> blob ));
82
- if (IS_ERR (reg_shm_out )) {
83
- dev_err (pvt_data .dev , "blob shm register failed\n" );
84
- ret = PTR_ERR (reg_shm_out );
85
- goto out ;
73
+ reg_shm = tee_shm_register_kernel_buf (pvt_data .ctx , p -> key ,
74
+ sizeof (p -> key ) + sizeof (p -> blob ));
75
+ if (IS_ERR (reg_shm )) {
76
+ dev_err (pvt_data .dev , "shm register failed\n" );
77
+ return PTR_ERR (reg_shm );
86
78
}
87
79
88
80
inv_arg .func = TA_CMD_SEAL ;
89
81
inv_arg .session = pvt_data .session_id ;
90
82
inv_arg .num_params = 4 ;
91
83
92
84
param [0 ].attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT ;
93
- param [0 ].u .memref .shm = reg_shm_in ;
85
+ param [0 ].u .memref .shm = reg_shm ;
94
86
param [0 ].u .memref .size = p -> key_len ;
95
87
param [0 ].u .memref .shm_offs = 0 ;
96
88
param [1 ].attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT ;
97
- param [1 ].u .memref .shm = reg_shm_out ;
89
+ param [1 ].u .memref .shm = reg_shm ;
98
90
param [1 ].u .memref .size = sizeof (p -> blob );
99
- param [1 ].u .memref .shm_offs = 0 ;
91
+ param [1 ].u .memref .shm_offs = sizeof ( p -> key ) ;
100
92
101
93
ret = tee_client_invoke_func (pvt_data .ctx , & inv_arg , param );
102
94
if ((ret < 0 ) || (inv_arg .ret != 0 )) {
@@ -107,11 +99,7 @@ static int trusted_tee_seal(struct trusted_key_payload *p, char *datablob)
107
99
p -> blob_len = param [1 ].u .memref .size ;
108
100
}
109
101
110
- out :
111
- if (reg_shm_out )
112
- tee_shm_free (reg_shm_out );
113
- if (reg_shm_in )
114
- tee_shm_free (reg_shm_in );
102
+ tee_shm_free (reg_shm );
115
103
116
104
return ret ;
117
105
}
@@ -124,36 +112,28 @@ static int trusted_tee_unseal(struct trusted_key_payload *p, char *datablob)
124
112
int ret ;
125
113
struct tee_ioctl_invoke_arg inv_arg ;
126
114
struct tee_param param [4 ];
127
- struct tee_shm * reg_shm_in = NULL , * reg_shm_out = NULL ;
115
+ struct tee_shm * reg_shm = NULL ;
128
116
129
117
memset (& inv_arg , 0 , sizeof (inv_arg ));
130
118
memset (& param , 0 , sizeof (param ));
131
119
132
- reg_shm_in = tee_shm_register_kernel_buf (pvt_data .ctx , p -> blob ,
133
- p -> blob_len );
134
- if (IS_ERR (reg_shm_in )) {
135
- dev_err (pvt_data .dev , "blob shm register failed\n" );
136
- return PTR_ERR (reg_shm_in );
137
- }
138
-
139
- reg_shm_out = tee_shm_register_kernel_buf (pvt_data .ctx , p -> key ,
140
- sizeof (p -> key ));
141
- if (IS_ERR (reg_shm_out )) {
142
- dev_err (pvt_data .dev , "key shm register failed\n" );
143
- ret = PTR_ERR (reg_shm_out );
144
- goto out ;
120
+ reg_shm = tee_shm_register_kernel_buf (pvt_data .ctx , p -> key ,
121
+ sizeof (p -> key ) + sizeof (p -> blob ));
122
+ if (IS_ERR (reg_shm )) {
123
+ dev_err (pvt_data .dev , "shm register failed\n" );
124
+ return PTR_ERR (reg_shm );
145
125
}
146
126
147
127
inv_arg .func = TA_CMD_UNSEAL ;
148
128
inv_arg .session = pvt_data .session_id ;
149
129
inv_arg .num_params = 4 ;
150
130
151
131
param [0 ].attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_INPUT ;
152
- param [0 ].u .memref .shm = reg_shm_in ;
132
+ param [0 ].u .memref .shm = reg_shm ;
153
133
param [0 ].u .memref .size = p -> blob_len ;
154
- param [0 ].u .memref .shm_offs = 0 ;
134
+ param [0 ].u .memref .shm_offs = sizeof ( p -> key ) ;
155
135
param [1 ].attr = TEE_IOCTL_PARAM_ATTR_TYPE_MEMREF_OUTPUT ;
156
- param [1 ].u .memref .shm = reg_shm_out ;
136
+ param [1 ].u .memref .shm = reg_shm ;
157
137
param [1 ].u .memref .size = sizeof (p -> key );
158
138
param [1 ].u .memref .shm_offs = 0 ;
159
139
@@ -166,11 +146,7 @@ static int trusted_tee_unseal(struct trusted_key_payload *p, char *datablob)
166
146
p -> key_len = param [1 ].u .memref .size ;
167
147
}
168
148
169
- out :
170
- if (reg_shm_out )
171
- tee_shm_free (reg_shm_out );
172
- if (reg_shm_in )
173
- tee_shm_free (reg_shm_in );
149
+ tee_shm_free (reg_shm );
174
150
175
151
return ret ;
176
152
}
0 commit comments