2012年5月24日 星期四

add_service and PERMISSION DENIED

在Radio中新增一service時發生

add_service('YourService',0x78) uid=1001 - PERMISSION DENIED

擋的地方是

int do_add_service(struct binder_state *bs,
                   uint16_t *s, unsigned len,
                   void *ptr, unsigned uid)
{
    struct svcinfo *si;
//    LOGI("add_service('%s',%p) uid=%d\n", str8(s), ptr, uid);

    if (!ptr || (len == 0) || (len > 127))
        return -1;

    if (!svc_can_register(uid, s)) {
        LOGE("add_service('%s',%p) uid=%d - PERMISSION DENIED\n",
             str8(s), ptr, uid);
        return -1;
    }




我的解法:

在service_manage.c中的新增一欄位


static struct {
    unsigned uid;
    const char *name;
} allowed[] = {
#ifdef LVMX
    { AID_MEDIA, "com.lifevibes.mx.ipc" },
#endif
    { AID_MEDIA, "media.audio_flinger" },
    { AID_MEDIA, "media.player" },
    { AID_RADIO, "YourService" },

這樣的話在svc_can_register()中的檢查就可以過了



詳細情形可參閱
http://www.jollen.org/blog/2010/02/android-uid-system.html











沒有留言:

張貼留言