Go to the source code of this file.
Defines | |
| #define | SET_ACCESS_MASK 0 |
| #define | ADD_INCLUDE_PATH 1 |
| #define | ADD_EXCLUDE_PATH 2 |
| #define | REGISTER 3 |
| #define | REMOVE_ALL_PATHS 4 |
| #define | UNREGISTER 5 |
| #define | GET_AN_ACCESS 6 |
| #define | RETURN_AN_ACCESS 7 |
| #define | INITIALIZE_CACHE 8 |
| #define | REGISTER_TRUSTED 9 |
| #define | UNREGISTER_TRUSTED 10 |
| #define | REMOVE_ALL_TRUSTED 11 |
| #define | REMOVE_TRUSTED 12 |
| #define | DAZUKO_FILENAME_MAX_LENGTH_COMPAT1 4095 |
| #define | IOCTL_SET_OPTION 0 |
| #define | IOCTL_GET_AN_ACCESS 1 |
| #define | IOCTL_RETURN_ACCESS 2 |
Functions | |
| int | dazuko_reqstream_dim_chunk0 (int size_chr, int size_int, int size_ptr) |
| int | dazuko_reqstream_chunksize (unsigned char *ll, int *size) |
| int | dazuko_reqstream_hl2ll (struct dazuko_request *req, unsigned char *ll) |
| int | dazuko_reqstream_ll2hl (unsigned char *ll, struct dazuko_request *req, int strict) |
| int | dazuko_reqstream_updll (struct dazuko_request *req, unsigned char *ll) |
|
|
Definition at line 41 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), dazukoAddExcludePath_TS(), and dazukoAddExcludePath_TS_compat1(). |
|
|
Definition at line 40 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), dazukoAddIncludePath_TS(), and dazukoAddIncludePath_TS_compat1(). |
|
|
Definition at line 55 of file dazuko_transport.h. Referenced by dazuko_handle_user_request_compat1(). |
|
|
Definition at line 45 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoGetAccess_TS(). |
|
|
Definition at line 47 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoInitializeCache_TS(). |
|
|
Definition at line 83 of file dazuko_transport.h. Referenced by dazuko_handle_user_request_compat1(), dazuko_handle_user_request_compat12(), and dazukoGetAccess_TS_compat1(). |
|
|
Definition at line 84 of file dazuko_transport.h. Referenced by dazuko_handle_user_request_compat1(), dazuko_handle_user_request_compat12(), and dazukoReturnAccess_TS_compat1(). |
|
|
Definition at line 82 of file dazuko_transport.h. Referenced by dazuko_handle_user_request_compat1(), dazuko_handle_user_request_compat12(), dazuko_set_path_compat1(), dazukoRegister_TS_compat1(), dazukoRemoveAllPaths_TS_compat1(), and dazukoSetAccessMask_TS_compat1(). |
|
|
Definition at line 42 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_handle_user_request_compat1(), dazuko_handle_user_request_compat12(), dazuko_set_option(), dazukoRegister_TS_compat1(), and dazukoRegister_TS_inner(). |
|
|
Definition at line 48 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoRegisterTrusted(). |
|
|
Definition at line 43 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), dazukoRemoveAllPaths_TS(), and dazukoRemoveAllPaths_TS_compat1(). |
|
|
Definition at line 50 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), and dazukoRemoveAllTrusted_TS(). |
|
|
Definition at line 51 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_handle_request_remove_trusted(), dazuko_set_option(), and dazukoRemoveTrusted_TS(). |
|
|
Definition at line 46 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoReturnAccess_TS(). |
|
|
Definition at line 39 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_handle_request_set_access_mask(), dazuko_handle_user_request_compat1(), dazuko_set_option(), dazukoSetAccessMask_TS(), and dazukoSetAccessMask_TS_compat1(). |
|
|
Definition at line 44 of file dazuko_transport.h. Referenced by dazuko_handle_request(), dazuko_set_option(), and dazukoUnregister_TS(). |
|
|
Definition at line 49 of file dazuko_transport.h. Referenced by dazuko_handle_request(), and dazukoUnregisterTrusted(). |
|
||||||||||||
|
Definition at line 170 of file dazuko_transport.c. References getinteger(). Referenced by dazuko_handle_user_request(). 00171 {
00172 /* this is a wrapper to getinteger that does NOT
00173 * increment the buffer pointer */
00174
00175 unsigned char *p = ll;
00176
00177 return getinteger(&p, size, 4);
00178 }
|
|
||||||||||||||||
|
Definition at line 304 of file dazuko_transport.c. Referenced by dazuko_reqstream_hl2ll(), dazuko_reqstream_ll2hl(), dazuko_reqstream_updll(), and process_request(). 00305 {
00306 /*
00307 * a request consists of:
00308 * chunk0 length (as 4-byte integer)
00309 * used flag, sizeof char/int/void* (as single bytes)
00310 * type, in size, out size, out used (as integers)
00311 * in buff, out buff (as pointers)
00312 */
00313 return (4 + (4 * size_chr) + (4 * size_int) + (2 * size_ptr));
00314 }
|
|
||||||||||||
|
Definition at line 320 of file dazuko_transport.c. References dazuko_reqstream_dim_chunk0(), putbyte(), putinteger(), and putpointer(). Referenced by process_request(). 00321 {
00322 unsigned char *wrptr;
00323 int size_chr;
00324 int size_int;
00325 int size_ptr;
00326 int size_req;
00327 int type_as_int;
00328
00329 wrptr = ll;
00330
00331 /* prepare to write */
00332 size_chr = sizeof(char);
00333 size_int = sizeof(int);
00334 size_ptr = sizeof(void *);
00335 size_req = dazuko_reqstream_dim_chunk0(size_chr, size_int, size_ptr);
00336
00337 /*
00338 * we do not support multi byte characters
00339 * and we assume maximum int and ptr sizes
00340 */
00341 /*
00342 * XXX how to check these at compile time?
00343 * #if (sizeof int < 4)
00344 * etc did not work :(
00345 */
00346 if (size_chr != 1)
00347 return -1;
00348
00349 /* convert everything to base types */
00350 type_as_int = (req->type[0] << 8) + (req->type[1] << 0);
00351
00352 /* stream out */
00353 if (putinteger(&wrptr, size_req, 4) != 0) return -1;
00354 if (putbyte(&wrptr, 0) != 0) return -1;
00355 if (putbyte(&wrptr, size_chr) != 0) return -1;
00356 if (putbyte(&wrptr, size_int) != 0) return -1;
00357 if (putbyte(&wrptr, size_ptr) != 0) return -1;
00358 if (putinteger(&wrptr, type_as_int, size_int) != 0) return -1;
00359 if (putinteger(&wrptr, req->buffer_size, size_int) != 0) return -1;
00360 if (putpointer(&wrptr, req->buffer, size_ptr) != 0) return -1;
00361 if (putinteger(&wrptr, req->reply_buffer_size, size_int) != 0) return -1;
00362 if (putpointer(&wrptr, req->reply_buffer, size_ptr) != 0) return -1;
00363 if (putinteger(&wrptr, req->reply_buffer_size_used, size_int) != 0) return -1;
00364
00365 /* done */
00366 return 0;
00367 }
|
|
||||||||||||||||
|
Definition at line 373 of file dazuko_transport.c. References dazuko_request::buffer, dazuko_request::buffer_size, dazuko_reqstream_dim_chunk0(), getbyte(), getinteger(), getpointer(), dazuko_request::reply_buffer, dazuko_request::reply_buffer_size, dazuko_request::reply_buffer_size_used, and dazuko_request::type. Referenced by dazuko_handle_user_request(), and process_request(). 00374 {
00375 unsigned char *rdptr;
00376 int size_req;
00377 int req_used;
00378 int size_chr;
00379 int size_int;
00380 int size_ptr;
00381 int type_as_int;
00382
00383 rdptr = (unsigned char *)ll;
00384
00385 /* only accept streams with our own layout (length part) */
00386 if (getinteger(&rdptr, &size_req, 4) != 0) return -1;
00387 if (strict)
00388 {
00389 if (size_req != dazuko_reqstream_dim_chunk0(sizeof(char), sizeof(int), sizeof(void *)))
00390 return -1;
00391 }
00392
00393 /* the kernel MUST have updated the stream, otherwise it's invalid */
00394 if (getbyte(&rdptr, &req_used) != 0) return -1;
00395 if (strict)
00396 {
00397 if (!req_used)
00398 return -1;
00399 }
00400
00401 /* only accept streams with our own layout (type width part) */
00402 if (getbyte(&rdptr, &size_chr) != 0) return -1;
00403 if (getbyte(&rdptr, &size_int) != 0) return -1;
00404 if (getbyte(&rdptr, &size_ptr) != 0) return -1;
00405 if (strict)
00406 {
00407 if ((size_chr != sizeof(char)) || (size_int != sizeof(int)) || (size_ptr != sizeof(void *)))
00408 return -1;
00409 }
00410 if (size_req != dazuko_reqstream_dim_chunk0(size_chr, size_int, size_ptr))
00411 return -1;
00412
00413 /* stream in values */
00414 if (getinteger(&rdptr, &type_as_int, size_int) != 0) return -1;
00415 if (getinteger(&rdptr, &req->buffer_size, size_int) != 0) return -1;
00416 if (getpointer(&rdptr, &req->buffer, size_ptr) != 0) return -1;
00417 if (getinteger(&rdptr, &req->reply_buffer_size, size_int) != 0) return -1;
00418 if (getpointer(&rdptr, &req->reply_buffer, size_ptr) != 0) return -1;
00419 if (getinteger(&rdptr, &req->reply_buffer_size_used, size_int) != 0) return -1;
00420
00421 /* post convert to req */
00422 req->type[0] = (type_as_int >> 8) & 0xFF;
00423 req->type[1] = (type_as_int >> 0) & 0xFF;
00424
00425 /* done */
00426 return 0;
00427 }
|
|
||||||||||||
|
Definition at line 433 of file dazuko_transport.c. References dazuko_reqstream_dim_chunk0(), getbyte(), getinteger(), putbyte(), putinteger(), dazuko_request::reply_buffer_size_used, skipinteger(), and skippointer(). Referenced by dazuko_handle_user_request(). 00434 {
00435 unsigned char *wrptr;
00436 int size_chr;
00437 int size_int;
00438 int size_ptr;
00439 int size_req;
00440
00441 wrptr = ll;
00442
00443 /* fetch the complete length spec to check it later */
00444 if (getinteger(&wrptr, &size_req, 4) != 0) return -1;
00445
00446 /* rather aux a test for minimum length */
00447 if (size_req < dazuko_reqstream_dim_chunk0(1, 4, 4))
00448 return -1;
00449
00450 /* set the "used" flag */
00451 /*
00452 * XXX delay this to a later point in time??? OTOH the update routine
00453 * will return an error when later steps fail and the stream will not
00454 * get passed back to the application, so this seems OK
00455 */
00456 if (putbyte(&wrptr, 1) != 0) return -1;
00457
00458 /* fetch the data width fields to check them */
00459 if (getbyte(&wrptr, &size_chr) != 0) return -1;
00460 if (getbyte(&wrptr, &size_int) != 0) return -1;
00461 if (getbyte(&wrptr, &size_ptr) != 0) return -1;
00462 if (size_chr != 1)
00463 return -1;
00464 if (size_req != dazuko_reqstream_dim_chunk0(size_chr, size_int, size_ptr))
00465 return -1;
00466
00467 /* skip over the fields not of interest, only write back the
00468 * "reply_buffer_size_used" component */
00469 if (skipinteger(&wrptr, size_int) != 0) return -1;
00470 if (skipinteger(&wrptr, size_int) != 0) return -1;
00471 if (skippointer(&wrptr, size_ptr) != 0) return -1;
00472 if (skipinteger(&wrptr, size_int) != 0) return -1;
00473 if (skippointer(&wrptr, size_ptr) != 0) return -1;
00474 if (putinteger(&wrptr, req->reply_buffer_size_used, size_int) != 0) return -1;
00475
00476 /* done */
00477 return 0;
00478 }
|
1.4.2